正则表达式
怎么获取正则匹配的数据的一部分
-
测试的字符串:
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)就会引发索引越界异常,因为本例中只有一个组(只有一个括号)