php – 如何编写与嵌套括号匹配的递归正则表达式?
发布时间:2020-12-13 16:33:56 所属栏目:PHP教程 来源:网络整理
导读:我试图写一个匹配嵌套括号的正则表达式,例如: "(((text(text))))(text()()text)(casual(characters(#$%^^#^%#@!**#^*!@#^**_)))" 应该匹配这样的字符串,因为所有嵌套的括号都是关闭的,而是: "(((text)))(text)(casualChars*#(!#*(!))" 不应该或者更好的是,
我试图写一个匹配嵌套括号的正则表达式,例如:
"(((text(text))))(text()()text)(casual(characters(#$%^^&&#^%#@!&**&#^*!@#^**_)))" 应该匹配这样的字符串,因为所有嵌套的括号都是关闭的,而是: "(((text)))(text)(casualChars*#(!&#*(!))" 不应该或者更好的是,应该至少匹配第一个“(((text)))(text)”部分. 实际上,我的正则表达式是: $regex = '/( ( (() ([^[]*?) (?R)? ()) ){0,}) /x'; 但它并没有像我期待的那样正常工作.如何解决?我哪里错了?谢谢!
当我找到这个答案时,我无法弄清楚如何修改模式以使用我自己的分隔符{}和{}.所以我的方法是让它更通用.
这是一个使用您自己的变量左右分隔符生成正则表达式模式的脚本. $delimiter_wrap = '~'; $delimiter_left = '{';/* put YOUR left delimiter here. */ $delimiter_right = '}';/* put YOUR right delimiter here. */ $delimiter_left = preg_quote( $delimiter_left,$delimiter_wrap ); $delimiter_right = preg_quote( $delimiter_right,$delimiter_wrap ); $pattern = $delimiter_wrap . $delimiter_left . '((?:[^' . $delimiter_left . $delimiter_right . ']++|(?R))*)' . $delimiter_right . $delimiter_wrap; /* Now you can use the generated pattern. */ preg_match_all( $pattern,$subject,$matches ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |