我正在编写一个关于正则表达式的非常简单的示例代码,但无法使用group
.
正则表达式为:rowspan=([\\d]+)
输入字符串为:<td rowspan=66>x.x.x</td>
我正在在线正则表达式引擎上测试它,很明显该组 66
可以捕获,请参见下面的快照:
基于javadoc,
Group zero denotes the entire pattern, so the expression m.group(0) is equivalent to m.group().
所以我认为应该有两个组,组0应该是rowspan=66
,组 1 应该是 66
。但是,我从下面的代码中所能得到的只是前者。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args[]){
String input = "<td rowspan=66>x.x.x</td> ";
String regex = "rowspan=([\\d]+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if(matcher.find()){
for(int i = 0; i < matcher.groupCount(); i++){
System.out.println(matcher.group(i));
}
}
}
}
输出为:
rowspan=66
感谢您提前提供的帮助。
最佳答案
我一直很喜欢正则表达式的命名组,Java 通过特殊的组构造 (?<name>)
支持这一点。 。这使得检索正确的组变得更容易,并且如果您稍后在表达式的前面添加另一个组,也不会搞砸。它还有一个副作用,即它消除了有关 matcher.groupCount()
的任何混淆。 .
将正则表达式更改为 rowspan=(?<rowspan>[\\d]+)
您的代码:
public class Test {
public static void main(String args[]){
String input = "<td rowspan=66>x.x.x</td> ";
String regex = "rowspan=(?<rowspan>[\\d]+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if(matcher.find()){
System.out.println("Entire match: " + matcher.group());
System.out.println("Row span: " + matcher.group("rowspan"));
}
}
}
你会得到:
Entire match: rowspan=66
Row span: 66
关于java - 为什么我在java正则表达式中只找到一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48108940/