Java正则表达式跳过匹配

时间:2015-10-20 21:33:11

标签: java regex pcre

我需要捕获文本中的所有#个字符,但#[ ... #]包围的字符除外。 我编写了PCRE版本(online example),该版本效果很好,但Java不支持(* SKIP)(* FAIL)。

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

这个正则表达式是否有Java等价物?感谢。

1 个答案:

答案 0 :(得分:2)

这会使用一个小技巧来匹配您不想要的#,然后匹配捕获组中的其余部分:

#\[.*?#\]|(#+)

https://regex101.com/r/sU1kR2/1

您需要提取第一个捕获组以获得所需的#

如果要捕获每个#不属于自定义括号的部分,可以从捕获组中删除+,如下所示:

#\[.*?#\]|(#)

此外,如果您可以使用##[text]#这样的文字,那么您可能需要按以下方式查看:

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

如果您可以使用\K(但我认为您不能使用Java),则使用以下内容会更简单,因为您不必担心捕获组:

#\[.*?#\]\K|#