В основном я пишу небольшой синтаксический анализатор пар, который использует регулярное выражение для анализа некоторых тегов, в настоящий момент у меня возникают проблемы с сопоставлением нескольких тегов в одном файле.Regex не получает все соответствия
Вот мой текущий шаблон регулярного выражения:
$regex = '#\{if \$([A-Za-z0-9_]+)\}([^{]+)(\{else\})?([^{]+)?\{\/if\}#'
Я пропускаю что-то здесь?
Вот пример файла шаблона Я пытаюсь разобрать
{if $name}
Hi my name is: {$name}.
{else}
No name set.
{/if}
{if $male}
Gender: Male.
{else}
Gender: Female.
{/if}
Вот мой PHP код, как он стоит на данный момент:
<?php
$tpl_file = file_get_contents('template.tpl');
$regex = '#\{if \$([A-Za-z0-9_]+)\}([^{]+)(\{else\})?([^{]+)?\{\/if\}#';
if (preg_match_all($regex, $tpl_file, $matches)) {
print_r($matches);
}
?>
Любая помощь очень ценится. Cheers
/u переключатель для ungreedy –
Показать свой PHP-код. –
'(\ {else \})? ([^ {] +)?' <- это звучит не так: вы хотите, чтобы блок «все остальное блокировал необязательно», здесь вы делаете «else» необязательным или что-либо, что не является '{'. Вы хотите поместить все это в одну группу, а не две отдельные группы. – fge