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

Match anywhere except between double square brackets

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

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

示例:

Val 1 | Val 2 | Val3

这将 return 2 场比赛。但是,如果 | 字符在 [[...]] 内,我想跳过它。示例:

Val 1 | [[ | ]] | Val 3

这里我不要| [[ ]] 中的字符为 returned.Therefore 这应该 return 2 个匹配项。

我尝试了否定前瞻,但我的正则表达式似乎不起作用。

我使用 \[\[.*\|.*\]\]:

捕获了 [[ | ]]
[^(\[\[.*\|.*\]\])]
(?!(\[\[.*\|.*\]\]))

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

使用 SKIP-FAIL technique:

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

regex demo

详情

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