当前正则表达式:
'('_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
启动调试器,如果还没有启动,点击绿色的线,说"匹配1 - ...."和到底部。
您将看到,在代码的最后,字符})与匹配项分开。我不知道我做错了什么,但我需要他们在match字符串。'})'可以多次出现,如'})})'。所以我需要把它们都添加到匹配字符串中
但如何?
谢谢!:)
从正则表达式的末尾删除此('}')+)
并替换为以下一个:
('}')'s*)+
它在这里放置了一个可选的空格's*
,并与+
重复。
您可以在这里使用递归来获得所有关闭的})
(如果有的话):
'('_IF'_'('%([a-zA-Z0-9_]+)'=([a-zA-Z0-9_]+)')'{(?:((?R))|[^{}])+'}')
regex101演示不幸的是,您不能单独使用regex获得所有的变量/值对。但是,您可以在函数中使用上述正则表达式,并递归传递第三个捕获组,直到不再有第三个捕获组。这样,您将获得所有的变量/值对。