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

我试图在下面的字符串中找到所有短代码标签对,但是当我使用这个正则表达式模式时,所有嵌套在其他短代码标签对中的短代码标签对都被忽略了


\[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>


噜噜哒
浏览 242回答 2
2回答

慕尼黑的夜晚无繁华

我想你正在寻找这样的东西\[sc(.*?)-(.*?)(?:-.*?)?[&nbsp;]var=`(.*?)`\]((?:(?!\[\/sc\1-\2(?:-.*?)?\])[\S\s])*?)\[\/sc\1-\2\]https://regex101.com/r/4Tv2Js/1

慕桂英3389331

我从 Quora 得到了一个回答说您将需要使用递归。并非所有语言在其正则表达式实现中都有递归。例如,在 PHP 中,您可以使用以下正则表达式来匹配括号内的文本,包括嵌套括号:&nbsp;&nbsp;&nbsp;&nbsp;\(([^()]|(?R))*\)匹配一个起始括号&nbsp;\(匹配任意数量的:不是括号的字符&nbsp;[^()]整个正则表达式&nbsp;(?R)匹配一个结束括号&nbsp;\)
打开App,查看更多内容
随时随地看视频慕课网APP