我最近正在学习Java的regex
部分,今天我遇到了使用边界\\G
的问题,这是我的代码:
String input = "abcdec";
System.out.println(String.format("Before :'%s' ; after replace : '%s'", input , input.replaceAll("\\Gx?", "!")));
当它打印Before :'abcdec' ; after replace : '!abcdec'
时,我不知道为什么打印这个,在第一次与字符串的开头匹配后,它用char'替换该地方'!' ,那么为什么它不能再次匹配?我认为正则表达式'\ Gx?'可以匹配每个地方。
我需要你的帮助,感谢每一位帮助!谢谢..
答案 0 :(得分:0)
我引用here:If you wish one search to pick up where the last one left off you can use the "\G" pattern element.
这意味着如果没有执行搜索,那么\ G只是告诉搜索从字符串的开头开始并在第一个匹配时停止。
这是另一个example。请注意,再次在字符串的请求中添加感叹号,因为第一个替换不会将起始位置从0移动。
您对计划的期望是什么?
答案 1 :(得分:0)
会发生什么:
replaceAll
从输入的开头(索引0
)\G
匹配初始起始值0
x
- 没关系,这是有条件的0
到0
的第一场比赛!!
添加到输出1
)0
。 \G
,适用于排名1
,与之匹配!!abc...
当我从Regex Boundary Matchers Java Tuturial阅读最后一个例子时,我更清楚了。