我刚开始学习正则表达式并拥有以下代码:
[1] String replace2 = "chocolate".replaceAll("[a-z]*","*");
[2] System.out.println(replace2); //output: **
[3] replace2 = "chocolate".replaceAll("[a-c]*","*");
[4] System.out.println(replace2); //output: **h*o**o*l**t*e*
Run Code Online (Sandbox Code Playgroud)
我不明白*在这种情况下如何工作:
参考[3],我的理解是每个发现的角色都被一颗星代替,每个未发现的角色都被"一颗星+未发现的角色"所取代.
例如,字符串"chocolate"中的第一个char是c,所以用*替换它.第二个字符是h,它不是我们想要的,所以用*h保留它.我可以将此逻辑与[4]处的输出相匹配.
我的问题是为什么[2]会回归两颗星?
星号*标记在RegEx中表示匹配前一个模式的"零或更多".
在你的case行[1]匹配整个字符串,然后匹配一个空字符串,因此**结果.
在行中,[3]每个匹配的一个或多个字母将匹配,但在每个匹配后,匹配一个空字符串.请参阅:https://regex101.com/r/sTmd9k/1
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |