在Java中,这个正则表达式与捕获组和反向引用如何匹配?
我很难理解某个Java正则表达式将匹配什么:在Java中,这个正则表达式与捕获组和反向引用如何匹配?,java,regex,Java,Regex,我很难理解某个Java正则表达式将匹配什么: "<(\\w+)></\\1>" 因为我认为它可能匹配一个数字,但它返回了我的字符串,因为它没有被替换。它旨在匹配XML/HTML标记对,例如 <tag></tag> \\1表示匹配到第一个匹配的组,即括号中的内容。(双反斜杠是因为反斜杠需要在Java字符串文本中转义。)它旨在匹配成对的XML/HTML标记,例如 <tag></tag> \\1表示匹配到第一个匹配的
"<(\\w+)></\\1>"
因为我认为它可能匹配一个数字,但它返回了我的字符串,因为它没有被替换。它旨在匹配XML/HTML标记对,例如
<tag></tag>
\\1
表示匹配到第一个匹配的组,即括号中的内容。(双反斜杠是因为反斜杠需要在Java字符串文本中转义。)它旨在匹配成对的XML/HTML标记,例如
<tag></tag>
\\1
表示匹配到第一个匹配的组,即括号中的内容。(双反斜杠是因为反斜杠需要以Java字符串文字转义。)我想您可能误解了本教程。()
中的任何内容都是一个集合,因此(\w{1})(\w{1})
表示有两个集合,每个集合中有一个字符。\1
引用第一组。因此,在搜索和替换时更像这样:
"1234234234234".replaceAll("(23)", "\\1ab")
结果将是
“123ab423ab423ab…”
,\1
返回您在第一组中匹配的内容。我想您可能误解了本教程。()
中的任何内容都是一个集合,因此(\w{1})(\w{1})
表示有两个集合,每个集合中有一个字符。\1
引用第一组。因此,在搜索和替换时更像这样:
"1234234234234".replaceAll("(23)", "\\1ab")
结果将是,
“123AB423AB423AB423AB…”
,\1
返回您在第一组中匹配的内容。只需重新了解regex反向引用(和捕获组),例如。捕获组使用()
,反向引用将由被引用组捕获的数据替换
然后使用测试表达式和数据,如下所示:
正则表达式:
将成为一个Java字符串”
,其输入如下所示:
测试目标字符串匹配()replaceFirst()replaceAll()组(0)组(1)
1是的是的是的身体
只需重新了解regex反向引用(和捕获组),例如。捕获组使用()
,反向引用将由被引用组捕获的数据替换
然后使用测试表达式和数据,如下所示:
正则表达式:
将成为一个Java字符串”
,其输入如下所示:
测试目标字符串匹配()replaceFirst()replaceAll()组(0)组(1)
1是的是的是的身体
请参见该教程中的。我不敢相信我错过了,它实际上已经解释了,非常感谢您参见该教程中的。我不敢相信我错过了,它实际上已经解释了,非常感谢感谢感谢感谢Simon,感谢帮助感谢您的帮助,尽管“1234234234234”.replaceAll(“(23)”,“\1ab”)不起作用,因为replaceAll的第二个参数未作为Regex@K-萨马没有想到这一点。但是您是对的,替换字符串不被视为正则表达式。在替换字符串中,您使用$1
来引用第一组,而不是\1
。它们被称为组,而不是集合。而且,{1}
除了给正则表达式添加混乱和混淆n00b之外,什么都不做;请不要使用它。@alan moore好的一个alan,$1
非常有用,谢谢!请注意,有些语言/工具确实使用了\1
、\2
等,有些语言/工具会采用这两种形式。这里有一个简单的提示。感谢您的帮助,尽管“1234234234234”。replaceAll(“(23)”,“\1ab”)不起作用,因为replaceAll的第二个参数没有作为Regex@K-萨马没有想到这一点。但是您是对的,替换字符串不被视为正则表达式。在替换字符串中,您使用$1
来引用第一组,而不是\1
。它们被称为组,而不是集合。而且,{1}
除了给正则表达式添加混乱和混淆n00b之外,什么都不做;请不要使用它。@alan moore好的一个alan,$1
非常有用,谢谢!请注意,有些语言/工具确实使用了\1
、\2
等,有些语言/工具会采用这两种形式。这里有一个简单的例子。