Java中regex matcher\G(上一个匹配的结尾)的示例会很好

Java中regex matcher\G(上一个匹配的结尾)的示例会很好,java,regex,Java,Regex,您是否有边界匹配器“\G”``的有用示例?请给我一些真实世界的例子。欢迎使用Java源代码。从“精通正则表达式。Jeffrey E.F.Friedl”中,我得到了一个解析HTML的有用示例,但我不确定如何将其翻译成Java。以下是一个示例: Pattern p = Pattern.compile("\\Gfoo"); Matcher m = p.matcher("foo foo"); String trueFalse = m.find() + ", " + m.find(

您是否有边界匹配器“\G”``的有用示例?请给我一些真实世界的例子。欢迎使用Java源代码。从“精通正则表达式。Jeffrey E.F.Friedl”中,我得到了一个解析HTML的有用示例,但我不确定如何将其翻译成Java。

以下是一个示例:

    Pattern p = Pattern.compile("\\Gfoo");
    Matcher m = p.matcher("foo foo");
    String trueFalse = m.find() + ", " + m.find();
    System.out.println(trueFalse);

    Pattern p1 = Pattern.compile("foo");
    Matcher m1 = p1.matcher("foo foo");
    String trueTrue = m1.find() + ", " + m1.find();
    System.out.println(trueTrue);

这是一个基于正则表达式的解决方案,可引入数千个分隔符:

String separateThousands(String s) {
  return s.replaceAll(
     "(?<=\\G\\d{3})(?=\\d)" + "|" + "(?<=^-?\\d{1,3})(?=(?:\\d{3})+(?!\\d))",
     ","
  );
}

您不需要使用正则表达式,但我确信有一些“现实生活”场景是这种技术的变体。

很抱歉问,“现实世界”场景在哪里?这很好。我希望其他作者能提供更多真实世界的例子。我不明白
“(?:%s)|(?:%s)”的意义。
?这应该是
“%s |%s”
@christoff:我只是在一般情况下玩得非常安全,在这种情况下,“左”或“右”可以有自己的顶级替换,但我认为你是对的:即使在这种情况下,它仍然有效。我最近提出了一个类似的问题:
String longline = "abcdefghijklmnopqrstuvwxyz";
for (String line : longline.split("(?<=\\G.{6})")) {
    System.out.println(line);
}
/* prints:
abcdef
ghijkl
mnopqr
stuvwx
yz
*/