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

时间:2016-10-28 23:47:08

标签: java regex whitespace

我遇到了以下字符串拆分 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

我想知道究竟是什么' /'对正则表达式做了什么,并想知道是否有人能够指出我的一些文档和/或突出显示它的作用的答案?

我还注意到,当我删除' //'从正则表达式,输出变为仅仅第一个字符,我认为这是有道理的,因为\ s *表示表达式吐出零个或多个空格字符。

This is the line: t
然而,这提出了一个问题:"' //'添加到看到拆分的正则表达式发生在行的末尾"?

任何建议都将受到高度赞赏。

ž

1 个答案:

答案 0 :(得分:2)

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

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

当您对正则表达式尝试.split()时,正则表达式引擎将尝试匹配正则表达式(从文本文字计算为参数),这两件事情可能发生:

  • 正则表达式无法匹配任何东西(这是正则表达式1发生的情况):分割有效无法操作,第0个元素是输入文本;
  • 正则表达式可以匹配空字符串(这是正则表达式2发生的情况):在这种情况下,正则表达式引擎注意到这一点并且不能让情况继续下去,否则会导致无限循环。因此,在继续之前,它会强行推进一个令牌。

因此你的结果:

  • 第一个正则表达式,没有任何匹配;
  • 使用第二个正则表达式,匹配一个空字符串;正则表达式引擎选择移动一个字符并将“丢弃”文本(前一个标记)视为第0个匹配。