这个正则表达式的功能是什么?



我最近在学习正则表达式,我不太确定以下正则表达式是如何工作的:

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"

下一个词也一样。

最新更新