白色空间匹配正则表达式

时间:2018-04-14 15:29:23

标签: java regex regex-group

我有以下两种模式来匹配html标记名称和可能的前导空格。 [ ]*位于命名组<doubletag>内的第一个模式不起作用,但[ ]*紧跟标记符号"<"后的第二个模式有效。我不知道为什么第一个不起作用。

 String s = "<      pre href = "dajflka" >ld fjalj09u293 ^% </pre>";
 Pattern ptr = Pattern.compile("(<(?<doubletag>[ ]*[a-z]+)([ \\d\\s\\w\\W[^>]])*>)(.*)(</\\k<doubletag>[ ]*>)");
 Pattern ptr = Pattern.compile("(<[ ]*(?<doubletag>[a-z]+)([ \\d\\s\\w\\W[^>]])*>)(.*)(</\\k<doubletag>[ ]*>)");
 Matcher match = ptr.matcher(s);
 if(match.find()){
        System.out.println("Found");
  }

2 个答案:

答案 0 :(得分:0)

\s是空格,如果这是你想要的,请放[\s]*

答案 1 :(得分:0)

实际上,第一个模式可以找到前导的空白区域。如果您只尝试第一个模式的第一组:

String s = "<      pre href = \" dajflka \" >";
Pattern pattern = Pattern.compile("<(?<doubletag>[ ]*[a-z]+)([ \\d\\s\\w\\W[^>]])*>");
Matcher match = pattern.matcher(s);
if (match.find()) {
    System.out.println("Found");
    System.out.println(match.group("doubletag"));
}

您将获得doubletag

"      pre"

问题是,在</pre>中,它没有前缀空格,因此无法找到组(</\k<doubletag>[ ]*>)。这就是为什么第一个模式与整个字符串不匹配的原因。