我正试图弄清楚我正在使用正则表达式的问题。
我在大型多行字符串上使用带有preg_match_all的正则表达式:
/(\{(if|while|function|loop|\$|#)(.+)\})/
它目前可以匹配以{开头}开头的所有文字,例如{$ test}或{$ function =“test()”}
但是,如果字符串中的一行包含两个匹配的块,则正则表达式返回整行,例如:
{$ value.url}“class =”link“> {$ value.title}
我无法弄清楚如何使正则表达式不与(。+)进行“贪婪”匹配。我有(。+)的原因是因为在两个括号{}之间可能有任何字符/数字/下划线/句点/引用/空格。
有人能帮助我吗?
答案 0 :(得分:1)
尝试匹配除}之外的所有内容,然后是}。
/(\{(if|while|function|loop|\$|#)([^\}]+)\})/
答案 1 :(得分:1)
您可以通过添加类似.+
.+?
取消{0}