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

慕桂英3389331
TA贡献2036条经验 获得超8个赞
我从 Quora 得到了一个回答说
您将需要使用递归。并非所有语言在其正则表达式实现中都有递归。
例如,在 PHP 中,您可以使用以下正则表达式来匹配括号内的文本,包括嵌套括号:
\(([^()]|(?R))*\)
匹配一个起始括号
\(
匹配任意数量的:
不是括号的字符
[^()]
整个正则表达式
(?R)
匹配一个结束括号
\)
- 2 回答
- 0 关注
- 241 浏览
添加回答
举报
0/150
提交
取消