我最近在学习正则表达式,我不太确定以下正则表达式是如何工作的:
str.replaceAll("(\w)(\w*)", "$2$1ay");
这使我们能够执行以下操作:
input string: "Hello World !"
return string: "elloHay orldWay !"
据我所知:w 应该匹配所有单词字符,包括 0-9 和下划线,$ 匹配字符串末尾的内容。
在replaceAll
方法中,第一个参数可以是正则表达式。它将字符串中的所有单词与正则表达式匹配,并将它们更改为第二个参数。
在简单的情况下,替换所有的工作方式如下:
str = "I,am,a,person"
str.replaceAll(",", " ") // I am a person
它匹配所有逗号并用空格替换它们。
在您的情况下,匹配的是每个字母字符 (\w(,后跟字母字符流 (\w*(。
围绕w
()
是将它们分组。所以你有两个组,第一个字母和其余部分。如果您使用 regex101 或一些类似的网站,您可以看到此内容的可视化。
您的替换是$2
-> 第二组,然后是 $1(剩余部分(,然后是ay
。
希望这能为您澄清。
将正则表达式括在括号中()
将使其成为捕获组。
这里有 2 个捕获组,(\w( 捕获单个单词字符,(\w*( 捕获零个或多个。 $1 和 $2 分别用于指代捕获的组,分别为第一和第二。
此外,replaceAll
单独获取每个单词。 因此,在"Hello"的这个示例中,"H"是第一个捕获的组,"ello"是第二个。它被重新排序的版本所取代 - $2$1,基本上是交换捕获的组。 所以你会得到"$2$1ay"作为"elloHay"
下一个词也一样。