(?<=#!)(\\ w + \\。* \\ w +)+与#!super.compound.key3不匹配

时间:2019-08-20 07:16:38

标签: java regex lookbehind

我写了一个简单的正则表达式

String s = "#!key1 #!compound.key2 #!super.compound.key3";
Matcher matcher = Pattern.compile("(?<=#!)(\\w+\\.*\\w+)+").matcher(s);
while (matcher.find()) {
  System.out.println(matcher.group());
}

结果

实际

key1
compound.key2
super.compound

我想知道为什么它与super.compound匹配,但与我期望的super.compound.key3不匹配。

预期

key1
compound.key2
super.compound.key3

欢迎对正则表达式进行任何改进。

2 个答案:

答案 0 :(得分:5)

您需要使用

(?<=#!)\w+(?:\.\w+)*

请参见regex demo和正则表达式图:

enter image description here

Java test

String s = "#!key1 #!compound.key2 #!super.compound.key3";
Matcher matcher = Pattern.compile("(?<=#!)\\w+(?:\\.\\w+)*").matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group());
}
// => [key1, compound.key2, super.compound.key3]

答案 1 :(得分:0)

我想这样写正则表达式(?<=#!)(\\ w + \\。?)+