我想了解以下正则表达式:
String.replaceAll("(.)(?=.*\\1)", "")
我理解第一部分(.)
用于分组单个字符(任何东西)。这是为\\1
创建后向引用。
另一部分(?=.*\\1)
我很困惑。它表示前一个字符1或0次后跟(不确定=
是什么),后跟任何字符1次或更多次,然后是后引用。
如果我输入以下hello12hel
,则删除重复项。你能解释一下它与副本的匹配程度吗?
我遇到的另一个问题是为什么(?=.*\\1)
需要分组。当没有提供正则表达式时失败(即如果我String.replaceAll((.)?=.*\\1)
)。 (为什么我们不能使用$ 1代替\\1
?)