代码之家  ›  专栏  ›  技术社区  ›  Abdelrahman

空白匹配正则表达式

  •  0
  • Abdelrahman  · 技术社区  · 6 年前

    我有以下两种模式来匹配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 回复  |  直到 6 年前
        1
  •  0
  •   xingbin    6 年前

    实际上,第一种模式可以找到前面的空白。如果仅尝试第一个图案的第一组:

    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>[ ]*>) 找不到。这就是为什么第一个模式不能匹配整个字符串。

        2
  •  0
  •   parlad    6 年前

    \s 是空白,如果这是你想要的,把 [\s]*