如何处理与边界'\\ G'相关的正则表达式?

时间:2012-07-26 07:27:24

标签: java regex

我最近正在学习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?'可以匹配每个地方。

我需要你的帮助,感谢每一位帮助!谢谢..

2 个答案:

答案 0 :(得分:0)

我引用hereIf 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)

编辑:好的,明白了。删除了错误的假设。


会发生什么:

  1. replaceAll从输入的开头(索引0
  2. 开始
  3. \G匹配初始起始值0
  4. 找不到
  5. x - 没关系,这是有条件的
  6. 到达目的地。成功从00的第一场比赛!
  7. 将替换!添加到输出
  8. 下一次迭代,从一个字符开始(索引1
  9. 上一场比赛的结尾是0\G,适用于排名1与之匹配
  10. ...踩过整个字符串,它永远不会匹配。
  11. 返回输出字符串:!abc...
  12. 当我从Regex Boundary Matchers Java Tuturial阅读最后一个例子时,我更清楚了。