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