php regex preg_match_all проблема - PullRequest
0 голосов
/ 29 июля 2011

Я пытаюсь выяснить проблему с регулярным выражением.

Я использую это регулярное выражение с preg_match_all для большой многострочной строки:

 /(\{(if|while|function|loop|\$|#)(.+)\})/

Этов настоящее время работает для сопоставления всего текста, который начинается с {и заканчивается}, таким как {$ test} или {$ function = "test ()"}

Однако, если одна строка в строке содержит два совпадающих блока,регулярное выражение возвращает всю строку, например:

{$ value.url} "class =" link "> {$ value.title}

Я не могу понять, как сделатьрегулярное выражение не выполняет «жадное» сопоставление с (. +). Причина, по которой у меня есть (. +), заключается в том, что между двумя скобками {}. * 1012 может быть любой символ / число / знак подчеркивания / точка / цитата / пробел.*

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Вы можете сделать .+ несвязным, добавив знак вопроса, подобный этому .+?

1 голос
/ 29 июля 2011

Попробуйте сопоставить все, кроме}, а затем}.

/(\{(if|while|function|loop|\$|#)([^\}]+)\})/

...