Java 正则表达式 line.split("\\s*//")

Java regex line.split("\\s*//")

我遇到了以下字符串拆分 line.split("\s*//")[0] 但似乎找不到有关使用的文档正则表达式中的 '/' 字符。

这是我的代码:

String line = "type=path.composition id=pathComp";
line = line.split("\s*//")[0];

Console console = System.console();
System.out.println("This is the line: " + line);

此处输出:

This is the line: type=rule.composition id=ruleComp

我想知道“/”到底对正则表达式有什么作用,并且想知道是否有人可以向我指出一些文档and/or一个强调它的作用的答案?

我还注意到,当我从正则表达式中删除“//”时,输出仅更改为第一个字符,我认为这是有道理的,因为 \s* 意味着表达式吐出零个或多个白色space 个字符。

This is the line: t

然而,这提出了问题:"what does the '//' add to the regular expression that sees the split occur at the end of the line"?

如有任何建议,我们将不胜感激。

Z

考虑您的输入文本 (type=rule.composition id=ruleComp) 和您的两个正则表达式:

  • 正则表达式 1:\s*//
  • 正则表达式 2:\s*.

当您针对正则表达式尝试 .split() 时,正则表达式引擎将尝试匹配正则表达式(它是根据作为参数的文本文字计算得出的),并且可能会发生以下两种情况:

  • 正则表达式无法匹配任何内容(这就是正则表达式 1 发生的情况):拆分实际上无法运行,第 0 个元素是输入文本;
  • 正则表达式可以匹配一个空字符串(这就是正则表达式 2 发生的情况):在这种情况下,正则表达式引擎会注意到这一点并且不能让这种情况继续下去,否则会导致无限循环。所以强行进一记再继续。

因此您的结果:

  • 对于第一个正则表达式,没有任何匹配项;
  • 对于第二个正则表达式,匹配一个空字符串;正则表达式引擎选择移动一个字符并将 "discarded" 文本(前一个标记)视为第 0 个匹配项。