无法理解字符串的RegEx拆分结果

时间:2018-01-22 05:19:32

标签: java regex

我在Java(Java 8)中运行2行以下:

String dirTree = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
String[] result = dirTree.split("\\n\\t[^\\t]");

结果显示 - 结果:

["dir", "ubdir1", "ubdir2\n\t\tfile.ext"]

我期待 - 结果:

["dir", "subdir1", "subdir2\n\t\tfile.ext"]

有人可以解释为什么结果中字符串的第一个字符缺失(例如 - “ubdir1”而不是“subdir1”)?

2 个答案:

答案 0 :(得分:1)

按此分开:

\n\t(?!\t)

<强>解释

  1. \n\t匹配一个换行符和一个标签
  2. (?!\t)否定前瞻以确保不立即跟进 在\n\t
  3. 之后

    因此(?!\t)[^\t]之间的区别在于第一个返回 true或false ,第二个匹配该字符。因此,在您的情况下,它匹配非制表符并使用它来分割。

答案 1 :(得分:0)

在应用之前,您必须了解正则表达式模式的工作原理。 您的正则表达式模式为\n\t[^\t]此搜索带有\n\t的模式以及除\t之外的任何字符。 [^\t]否定了这种模式。此模式匹配除\t之外的任何字符。因此,在您的情况下,它匹配s,因为它是除\t之外的任何字符。

要获得预期结果,您的模式应为\n\t