匹配双括号之间的任何地方

问题描述 投票:2回答:1

我正在尝试匹配模式,除非匹配出现在双方括号之间。

我要匹配的模式是\|,即|字符。

示例:

Val 1 | Val 2 | Val3

这将返回2个匹配项。但是,如果|字符位于[[...]]内部,我想跳过它。示例:

Val 1 | [[ | ]] | Val 3

这里我不想要|要返回的[[]]内部的char。因此应返回2个匹配项。

我尝试使用负面的标头,但我的正则表达式似乎无效。

我使用[[ | ]]捕获了\[\[.*\|.*\]\]

[^(\[\[.*\|.*\]\])]
(?!(\[\[.*\|.*\]\]))

这些似乎没有给我想要的结果。

php regex pcre regex-lookarounds
1个回答
1
投票

使用SKIP-FAIL technique

\[\[.*?]](*SKIP)(*FAIL)|\|

请参见regex demo

详细信息

  • \[\[.*?]](*SKIP)(*FAIL)-匹配[[,然后匹配任何0+个字符,尽可能少,除了换行符(添加/s修饰符以跨行匹配),然后匹配]],然后匹配(*SKIP)(*FAIL) (或(*SKIP)(*F)(*SKIP)(?!))将忽略匹配项,并使正则表达式引擎从当前匹配项的末尾继续搜索另一个|
  • |-或
  • [\|-文字|管道符号
© www.soinside.com 2019 - 2024. All rights reserved.