2017-08-14 22 views
2

我试图匹配一个模式期望一个组 我试图匹配的模式是/\|/g即|字符 示例 - Val 1 | Val 2 | Val3 这将返回2个匹配项如何匹配除正则表达式中的捕获组PCRE(Php)

但是我想跳过| char如果它在里面[[]] 示例 - 'Val 1 | [[| ]] | Val 3'

这里我不想要| char [[]]中的char将被返回。所以这应该返回2个匹配。

我试过负面看,但我的正则表达式似乎并没有工作。

我抓住[[| ]]使用 - \[\[.*\|.*\]\] [^(\[\[.*\|.*\]\])](?!(\[\[.*\|.*\]\]))似乎没有给我想要的结果。

谢谢!

回答

1

使用SKIP-FAIL technique

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

regex demo

详细

  • \[\[.*?]](*SKIP)(*FAIL) - 匹配[[,那么任何0+字符,尽可能少,比其他行打破字符(添加/s修改器以跨线匹配),然后]],然后(*SKIP)(*FAIL)(或(*SKIP)(*F)(*SKIP)(?!))将省略匹配并将使正则表达式引擎继续从当前匹配
  • |的端搜索另一个| - 或
  • \| - 字面|管符号
+0

不应该是\ [。*?\] \](* SKIP)(* FAIL)| \ | ? \] \]会让它保持一致,我猜。 –

+0

']'不是一个特殊的正则表达式元字符,它不需要转义。最好的做法是只逃避必须逃脱的东西。 –

+0

感谢您的解释! –

相关问题