Java 中正则表达式匹配器 \G(前一个匹配的结束)的示例会很好

Mis*_*ean 4 java regex

你有边界匹配器 "\G"` 的任何有用的例子吗?请给我一些真实世界的例子。Java 源代码表示赞赏。从“掌握正则表达式。Jeffrey EF Friedl”我得到了一个解析 HTML 的有用示例,但我不确定是否可以翻译成 Java。

pol*_*nts 5

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

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

这将转换"-1234567890.1234567890""-1,234,567,890.1234567890".

也可以看看


这个更抽象,但你可以使用\G固定长度的lookbehind将split一个长字符串分成固定宽度的块:

String longline = "abcdefghijklmnopqrstuvwxyz";
for (String line : longline.split("(?<=\\G.{6})")) {
    System.out.println(line);
}
/* prints:
abcdef
ghijkl
mnopqr
stuvwx
yz
*/
Run Code Online (Sandbox Code Playgroud)

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