Java 正则表达式跳过匹配

Java regex skip match

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

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

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

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

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

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

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

如果您想捕获每个 # 不属于或不在自定义括号中的个体,您可以从捕获组中删除 +,如下所示:

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

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

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

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

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