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

Java正则表达式行.split(";\\s*/";),java,regex,whitespace,Java,Regex,Whitespace,我遇到了以下字符串split行。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

我遇到了以下字符串split行。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的情况):在这种情况下,正则表达式引擎会注意到这一点,并且不能让这种情况继续下去,因为否则它将导致无休止的循环。因此,在继续进行之前,它会以一种方式强制推进
因此,您的结果是:

  • 对于第一个正则表达式,没有匹配项
  • 对于第二个正则表达式,匹配一个空字符串;正则表达式引擎选择移动一个字符,并将“丢弃的”文本(上一个标记)视为第0个匹配项

    • 一个
      /
      没有什么特别的作用,只是字面意思;你能“阅读”
      \s*/
      并首先了解它的意思吗?嗨,fge。谢谢你。不过,我不确定“/”是否会被字面理解。它当然允许把这一行读到最后。如果删除,返回值将更改为“This is the line:t”。“'read'\s*/”是什么意思?regex
      “\\s*/”
      表示“两个前斜杠,前面可选空白”。由于您的输入字符串没有任何正斜杠,因此该字符串不会被拆分,只会原封不动地返回。正如上面所说的:如果表达式与输入的任何部分都不匹配,那么结果数组只有一个元素,即这个字符串。更准确地说,第二个正则表达式将返回这个数组:
      newstring[]{“t”,“y”,“p”,“p”,“a”,“t”,“h”,“c”,“o”,“m”,“p”,“o”,“s”,“i”,“i”,“o”,“n”,“n”,“i”,“d”,“=”,“p”,“a”,“t”“h”、“C”、“o”、“m”、“p”}
      @Andreas;我太懒了,无法完全展开:)实际上,我很惊讶它在空格所在的位置返回了一个空字符串。我认为正则表达式是贪婪的,它周围的空格加上两个空字符串将是一个分隔符。@Andreas正则表达式引擎可能是贪婪的,但它永远不会试图寻找超出它实际满意的东西;这就是为什么
      \s*
      匹配一个空字符串,毕竟:)啊,我现在明白了。谢谢大家。谢谢你,福格。我现在明白你的意思了!