【发布时间】:2011-10-15 21:12:13
【问题描述】:
我正在尝试找出我在使用正则表达式时遇到的问题。
我在一个大的多行字符串上使用这个带有 preg_match_all 的正则表达式:
/(\{(if|while|function|loop|\$|#)(.+)\})/
目前它可以匹配所有以 { 开头并以 } 结尾的文本,例如 {$test} 或 {$function="test()"}
但是,如果字符串中的一行包含两个匹配的块,则正则表达式返回整行,例如:
{$value.url}" class="link">{$value.title}
我不知道如何使正则表达式不与 (.+) 进行“贪婪”匹配。我之所以有 (.+) 是因为两个括号 {} 之间可能有任何字符/数字/下划线/句点/引号/空格。
谁能帮帮我?
【问题讨论】:
-
这是否也验证或支持嵌套,如果字符串是
{if {$fish} do }会发生什么 -
这是一个很好的问题,但是我们使用的是不使用嵌套 {} 的模板引擎,您的示例是 {if="$fish"}This is a {$fish}{ /如果}。我们只需要一个快速请求来扫描我们所有的文件,以找出哪些文件中有 if/while/etc 语句。
标签: php regex preg-match preg-match-all