正则表达式如何获取被匹配字符串的匹配组名

时间:2021-06-11 18:47:47
比如
"abcdefg"匹配(?<name1>abc)|(?<name2>efg)
获得了一个匹配组abc
那么,我怎么知道匹配组abc是由name1还是name2匹配的呢?

3 个解决方案

#1


你好像对正则表达式的理解有错误。。。
如果你需要获取元组的话使用
\1,\2,\3,\4

#2


如果每次matcher.find()成立,那么哪个组获取的内容不为null那么就是匹配对应的组
---------- java ----------
group name1:abc
group name2:null
group name1:null
group name2:def

Output completed (1 sec consumed) - Normal Termination


import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class Test{
public static void main(String[] args){
String content = "abcdef";
String regex = "(?<name1>abc)|(?<name2>def)";
Matcher matcher = Pattern.compile(regex).matcher(content);
while(matcher.find()){
System.out.printf("group name1:%s%n",matcher.group("name1"));
System.out.printf("group name2:%s%n",matcher.group("name2"));
}
}
}

#3


正则不太熟、

#1


你好像对正则表达式的理解有错误。。。
如果你需要获取元组的话使用
\1,\2,\3,\4

#2


如果每次matcher.find()成立,那么哪个组获取的内容不为null那么就是匹配对应的组
---------- java ----------
group name1:abc
group name2:null
group name1:null
group name2:def

Output completed (1 sec consumed) - Normal Termination


import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class Test{
public static void main(String[] args){
String content = "abcdef";
String regex = "(?<name1>abc)|(?<name2>def)";
Matcher matcher = Pattern.compile(regex).matcher(content);
while(matcher.find()){
System.out.printf("group name1:%s%n",matcher.group("name1"));
System.out.printf("group name2:%s%n",matcher.group("name2"));
}
}
}

#3


正则不太熟、