Java 正则表达式跳过匹配
Java regex skip match
我需要捕获文本中所有 #
个字符,除了那些被 #[ ... #]
包围的字符。
我编写了 PCRE 版本 (online example),效果很好,但 Java 不支持 (*SKIP)(*FAIL)。
#\[.*#\](*SKIP)(*FAIL)|#
是否有 Java 这个正则表达式的等价物?谢谢。
这使用了一个小技巧来先匹配您不想要的 #
,然后匹配捕获组中的其余部分:
#\[.*?#\]|(#+)
https://regex101.com/r/sU1kR2/1
您需要提取第一个捕获组以获得所需的 #
。
如果您想捕获每个 #
不属于或不在自定义括号中的个体,您可以从捕获组中删除 +
,如下所示:
#\[.*?#\]|(#)
此外,如果您可以使用 ##[text]#
之类的文本,那么您可能需要按如下方式查看:
#\[.*?#\]|(#(?!\[))
如果你可以使用 \K
(但我认为你不能在 Java 中使用),使用以下内容会更简单,因为这样你就不必担心捕获组:
#\[.*?#\]\K|#
我需要捕获文本中所有 #
个字符,除了那些被 #[ ... #]
包围的字符。
我编写了 PCRE 版本 (online example),效果很好,但 Java 不支持 (*SKIP)(*FAIL)。
#\[.*#\](*SKIP)(*FAIL)|#
是否有 Java 这个正则表达式的等价物?谢谢。
这使用了一个小技巧来先匹配您不想要的 #
,然后匹配捕获组中的其余部分:
#\[.*?#\]|(#+)
https://regex101.com/r/sU1kR2/1
您需要提取第一个捕获组以获得所需的 #
。
如果您想捕获每个 #
不属于或不在自定义括号中的个体,您可以从捕获组中删除 +
,如下所示:
#\[.*?#\]|(#)
此外,如果您可以使用 ##[text]#
之类的文本,那么您可能需要按如下方式查看:
#\[.*?#\]|(#(?!\[))
如果你可以使用 \K
(但我认为你不能在 Java 中使用),使用以下内容会更简单,因为这样你就不必担心捕获组:
#\[.*?#\]\K|#