首页 > 解决方案 > 正则表达式:之间有零个或多个字符的负环视

问题描述

我有一个消极的后视和消极的前瞻,到目前为止它几乎可以工作。我用谷歌搜索,我搜索了 stackOverflow,但找不到我的确切问题。我想要实现的是捕获括号内的任何文本,只要它们在我的<code></code>标签之间找不到。

我的正则表达式尝试

(?<!<code>)\[(.*?)\](?!<\/code>)

测试文本

[bracket]                                           <-- currently matches (ok)
<code>[bracket]                                     <-- currently does NOT match (ok)
[bracket]</code>                                    <-- currently does NOT match (ok)
<code> some text [bracket] other text </code>       <-- currently matches (!!NOT OK!!)
<code>[bracket]</code>                              <-- currently does NOT match (ok)

我真的很难解决这样一个事实,即您必须在负后瞻/负前瞻中具有固定宽度。我已经尝试过任何尝试抓取<code>和括号之间的任何字符,但这只是抓取<code>标签并与上面的几乎所有示例匹配。我已经尝试让^角色尝试排除任何行,<code>但最终只是排除了所有内容。我无计可施。任何方向都非常感谢!

标签: phpregexregex-lookarounds

解决方案


你可以使用:

<code>[\s\S]*?</code>(*SKIP)(*FAIL)|\[.+?\]

演示和解释


推荐阅读