gpt4 book ai didi

java - 为什么我在java正则表达式中只找到一组

转载 作者:行者123 更新时间:2023-12-02 02:23:34 25 4
gpt4 key购买 nike

我正在编写一个关于正则表达式的非常简单的示例代码,但无法使用group .

正则表达式为:rowspan=([\\d]+)

输入字符串为:<td rowspan=66>x.x.x</td>

我正在在线正则表达式引擎上测试它,很明显该组 66可以捕获,请参见下面的快照:

enter image description here

基于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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com