加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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 );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读