Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,这个正则表达式与捕获组和反向引用如何匹配?_Java_Regex - Fatal编程技术网

在Java中,这个正则表达式与捕获组和反向引用如何匹配?

在Java中,这个正则表达式与捕获组和反向引用如何匹配?,java,regex,Java,Regex,我很难理解某个Java正则表达式将匹配什么: "<(\\w+)></\\1>" 因为我认为它可能匹配一个数字,但它返回了我的字符串,因为它没有被替换。它旨在匹配XML/HTML标记对,例如 <tag></tag> \\1表示匹配到第一个匹配的组,即括号中的内容。(双反斜杠是因为反斜杠需要在Java字符串文本中转义。)它旨在匹配成对的XML/HTML标记,例如 <tag></tag> \\1表示匹配到第一个匹配的

我很难理解某个Java正则表达式将匹配什么:

"<(\\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
等,有些语言/工具会采用这两种形式。这里有一个简单的例子。