当前REGEX:
\(\_IF\_\(\%([a-zA-Z0-9_]+)\=([a-zA-Z0-9_]+)\)\{\s+(.*?)\s+(\}\)+)
当前输入:
<div class="right-side w-37">
(_IF_(%verified=1){
(_IF_(%post_on_profile=1){
what is going on!!
})
})
</div>
看看这个演示:http://regex101.com/r/fN2kG5/#debugger
启动调试器(如果尚未启动),单击绿线表示&#34;匹配1 - ....&#34;并且到底部。
您将看到在代码的最后,字符})与匹配分开。我不知道我做错了什么,但我在匹配字符串中需要它们。可能会出现多次&#39;})&#39;,例如&#39;})})&#39;。所以我需要在匹配字符串中添加所有这些内容。
但是怎么样?
谢谢! :)
答案 0 :(得分:1)
从正则表达式的末尾删除此(\}\)+)
并替换为下面的一个:
(\}\)\s*)+
这里放置一个可选的空格\s*
,然后用+
重复。
答案 1 :(得分:0)
您可以在此处使用递归来获取所有结束})
(如果有):
\(\_IF\_\(\%([a-zA-Z0-9_]+)\=([a-zA-Z0-9_]+)\)\{(?:((?R))|[^{}])+\}\)
不幸的是,单独使用regex无法获得所有变量/值对。但是,您可以在函数中使用上述正则表达式,并在递归中传递第三个捕获的组,直到您不再拥有第三个捕获的组。这样,您将获得所有变量/值对。