为了账号安全,请及时绑定邮箱和手机立即绑定

如何告诉正则表达式不要忽略嵌套匹配?

如何告诉正则表达式不要忽略嵌套匹配?

PHP
噜噜哒 2022-01-02 20:20:49
我试图在下面的字符串中找到所有短代码标签对,但是当我使用这个正则表达式模式时,所有嵌套在其他短代码标签对中的短代码标签对都被忽略了\[sc(.*?)-(.*?) var=`(.*?)`\]((.|\r\n)*?)\[\/sc\1-\2\]这是我正在搜索的字符串<ul>  [sc1-s-foreach var=`Trip/Day 1`]  <li><b>Event</b>    <ul>      <li>        <b>What:</b> [sc1-s-foreach-g var=`What`][/sc1-s-foreach-g]      </li>      <li>        <b>How:</b> [sc1-s-foreach-g var=`How`][/sc1-s-foreach-g]      </li>      <li>        <b>When:</b> [sc1-s-foreach-g var=`When`][/sc1-s-foreach-g]      </li>      <li>        <b>Where:</b> [sc1-s-foreach-g var=`Where`][/sc1-s-foreach-g]      </li>    </ul>  </li>  [/sc1-s-foreach]</ul>
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我想你正在寻找这样的东西

\[sc(.*?)-(.*?)(?:-.*?)?[ ]var=`(.*?)`\]((?:(?!\[\/sc\1-\2(?:-.*?)?\])[\S\s])*?)\[\/sc\1-\2\]

https://regex101.com/r/4Tv2Js/1


查看完整回答
反对 回复 2022-01-02
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我从 Quora 得到了一个回答说

您将需要使用递归。并非所有语言在其正则表达式实现中都有递归。

例如,在 PHP 中,您可以使用以下正则表达式来匹配括号内的文本,包括嵌套括号:

    \(([^()]|(?R))*\)
  • 匹配一个起始括号 \(

  • 匹配任意数量的:

    • 不是括号的字符 [^()]

    • 整个正则表达式 (?R)

  • 匹配一个结束括号 \)


查看完整回答
反对 回复 2022-01-02
  • 2 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号