正则表达式获取匹配数据中的一部分值

admin 646 2022-06-22

正则表达式

怎么获取正则匹配的数据的一部分

  • 测试的字符串:style="max-width: 100%;" width="50%",现在想取 width=xx% 中的xx值,本例中为 50

  • 匹配正则:width=".*?%" ,可以匹配上width="50%",但无法直接获得值

  • 进一步完善正则:width="(.*?)%",此处的括号(组)用于后续获取想要的值,如下

    • String demoStr = "style=\"max-width: 100%;\" width=\"50%\"";
      String widthRegex = "width=\"(.*?)%\"";
      Matcher widthMatcher = Pattern.compile(widthRegex).matcher(demoStr);
      while (widthMatcher.find()){
          String group = widthMatcher.group();
          //结果为:width="50%"
          //group()相当于group(0),获取所有匹配组
          System.out.println(group);
          
          String width = widthMatcher.group(1);
          //结果为:50
          //获取正则中第一个组,也就是第一个()中的内容
          System.out.println(width);
      
          int i = widthMatcher.groupCount();
          //结果为:1
          //获取正则中的所有组的数量,此案例中只有1个括号,所以结果为1
          System.out.println(i);
      }
      
  • 总结:在正则表达式中可以使用分组,也就是使用括号,然后在matcher.group(int group)方法中获取对应组的内容。注意:使用group()方法时可能会出现索引越界异常,比如在本例中使用group(2)就会引发索引越界异常,因为本例中只有一个组(只有一个括号)


# Java # 正则表达式