php regex preg_match_all问题

时间:2011-07-29 11:17:37

标签: php regex preg-match preg-match-all

我正试图弄清楚我正在使用正则表达式的问题。

我在大型多行字符串上使用带有preg_match_all的正则表达式:

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

它目前可以匹配以{开头}开头的所有文字,例如{$ test}或{$ function =“test()”}

但是,如果字符串中的一行包含两个匹配的块,则正则表达式返回整行,例如:

{$ value.url}“class =”link“> {$ value.title}

我无法弄清楚如何使正则表达式不与(。+)进行“贪婪”匹配。我有(。+)的原因是因为在两个括号{}之间可能有任何字符/数字/下划线/句点/引用/空格。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

尝试匹配除}之外的所有内容,然后是}。

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

答案 1 :(得分:1)

您可以通过添加类似.+

的问号来.+?取消{0}