Java正则表达式跳过匹配
问题描述:
我需要捕获文本中的所有#
字符,除了那些被#[ ... #]
包围的字符。 我写了PCRE版本(online example),它很好用,但Java不支持(* SKIP)(* FAIL)。Java正则表达式跳过匹配
#\[.*#\](*SKIP)(*FAIL)|#
有没有这个正则表达式的Java等价物?谢谢。
答
它使用一个小窍门,以匹配你不想先#
秒,然后休息一个捕获组匹配:
#\[.*?#\]|(#+)
https://regex101.com/r/sU1kR2/1
你需要解压首先捕获组以获得期望的#
s。
如果你想要捕捉的每个个体#
没有的或定制托架部分,你可以从捕获组降+
如下:
#\[.*?#\]|(#)
而且,如果你能有这样的文字##[text]#
,那么你可能如下需要环视:
#\[.*?#\]|(#(?!\[))
如果你可以使用\K
(但我不认为你可以在Java),因为这样你就不必担心捕获组是即使有以下简单:
#\[.*?#\]\K|#
给你想要一个字符串的例子匹配。 –
@ jamesjelo4kul:我的问题中有一个链接。我添加了一些文字以获得更好的想象力。 – sssss
@anubhava:只需捕捉,然后我可以用Java替换它... – sssss