用正则表达式".*"替换字符串将返回替换两次

mae*_*rch 7 java regex

鉴于此代码:

String replaced = "A".replaceAll(".*", "HI");
Run Code Online (Sandbox Code Playgroud)

为什么replaced包含字符串HIHI而不是HI我猜想的?由于使用模式^.*产量HI,它似乎与行的开头有关,但我没有理由这样做.

Ode*_*eer 5

查看replaceAll javadoc:将此字符串的每个子字符串替换为给定替换的给定正则表达式.这匹配两个子串:""和"A".你可以通过测试看到这一点

String replaced = "".replaceAll( ".*", "HI" );
Run Code Online (Sandbox Code Playgroud)

这导致打印单个"HI"

  • 在"A"中有两个位置(在字母之间可以这么说):0和1.在0"A"匹配,在1""匹配. (2认同)

Eti*_*ret 5

认为这是因为.*首先匹配整个字符串,然后匹配字符串末尾的空字符串.当然,^.*不会匹配"A"末尾的空字符串,所以最终只有一个"HI".