繁体   English   中英

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

[英]How to handle with this regex which is associated with boundry '\\G'?

我最近正在学习Java的regex部分,今天我遇到了关于使用boundry \\\\G ,这是我的代码:

  String input = "abcdec";
  System.out.println(String.format("Before :'%s' ; after replace : '%s'", input , input.replaceAll("\\Gx?", "!")));

当它打印Before :'abcdec' ; after replace : '!abcdec' Before :'abcdec' ; after replace : '!abcdec' ,我不知道为什么打印它,在第一次与字符串开头匹配之后,将其替换为char'!' ,但是为什么它又不能匹配?我认为正则表达式为'\\ Gx? 可以匹配每个地方。

我需要您的帮助,感谢您的帮助!

我在这里引用: If you wish one search to pick up where the last one left off you can use the "\\G" pattern element. 这意味着,如果未执行任何搜索,则\\ G只是告诉搜索从字符串的开头开始并在第一个匹配项处停止。

这是另一个例子 请注意,再次将感叹号添加到字符串的开头,因为第一次替换没有将起始位置从0移动。

您对程序有什么期望?

编辑:好的,知道了。 删除了错误的假设。


发生的是:

  1. replaceAll从输入的开头(索引0 )开始。
  2. \\G匹配初始起始值0
  3. 找不到x没关系,这是有条件的
  4. 到达终点。 成功的第一场比赛从00
  5. 添加替换! 到输出
  6. 下一次迭代,从一个字符开始(索引1
  7. 最后一场比赛的结束是0 \\G ,应用于位置1不匹配
  8. ...逐步浏览整个字符串,它将永远不会匹配。
  9. 返回输出字符串: !abc...

当我阅读Regex边界匹配器Java Tuturial的最后一个示例时,对我来说更清楚了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM