我很难理解某个Java正则表达式会匹配什么:
"<(\\w+)></\\1>"
我已阅读此http://docs.oracle.com/javase/tutorial/essential/regex/
但我仍然无法弄清楚该表达式会匹配什么,尤其是\1
部分。我可以看到<(\w+)>
是一个与任何单词匹配的占有量词,但我不明白为什么使用根据本教程的()
来匹配一个组。
至于第二部分,我只是不知道\1
会匹配什么。我用
"001123344556678899".replaceAll("\\1", "");
因为我认为它可能与一个数字相匹配,但它让我回到我的字符串,因为没有任何替代。
答案 0 :(得分:8)
它旨在匹配XML / HTML标记对,例如
<tag></tag>
\\1
表示匹配第一个匹配的组,即括号中的内容。 (双反斜杠是因为反斜杠需要在Java字符串文字中进行转义。)
答案 1 :(得分:1)
我想你可能误解了这个教程。 ()
内的任何内容都是一个集合,因此(\w{1})(\w{1})
意味着您有2个集合,每个集合中包含1个字符。 \1
,引用第一组。所以在搜索和替换中更像是这样:
"1234234234234".replaceAll("(23)", "\\1ab")
,结果为"123ab423ab423ab..."
,\1
会返回您在第一集中匹配的内容。
答案 2 :(得分:1)