我刚刚开始学习正则表达式并拥有以下代码:
[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*
我不明白*在这种情况下如何工作:
参考[3],我的理解是每个发现的角色都被一颗星代替,每个未发现的角色都被“一颗星+未发现的角色”取代
例如,字符串“chocolate”中的第一个字符是c,所以用*替换它。第二个字符是h,它不是我们想要的,所以用* h保留它。我可以将此逻辑与[4]处的输出相匹配。
我的问题是为什么[2]会返回两颗星?
答案 0 :(得分:5)
星号*
标记在RegEx中表示匹配前一个模式的“零或更多”。
在你的情况下,行[1]
匹配整个字符串,然后匹配一个空字符串,因此**
结果。
在行[3]
中,每个匹配的一个或多个字母将匹配,但在每个匹配后,匹配一个空字符串。请参阅:https://regex101.com/r/sTmd9k/1
答案 1 :(得分:0)
获得一星级使用data, next := GiveRandomData(i)
i = next
+
使用String replace2 = "chocolate".replaceAll("[a-z]+","*");
也会找到空字符串