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

标签 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

然而,这提出了一个问题:“‘//’添加到正则表达式中以看到分割发生在行尾”?

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

Z

最佳答案

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

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

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

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

因此你的结果:

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

关于Java正则表达式line.split ("\\s*//"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314626/

相关文章:

regex - 在 vba 中转义特殊字符不起作用

java - 需要手机号码验证指南

java - Java验证日期在当前星期

java - 接口(interface)是否会因为减少 Java 编译器或 Eclipse 中的依赖关系而影响性能?

javascript - JavaScript 中区 block 哈希的正则表达式

git - 从 git 空白检查中排除 Jest 快照

css - 无法删除页脚下方的空白区域

xml - 即使使用 <xsl :text> tag,XSL 也会忽略我的空格

java - Retrofit API Post 调用返回错误 500,与 Postman 配合良好

java - 如何将字符串转换为日期?