我有一个像
String str = "美国临时申请No.62004615";
和正则表达式
String regex = "(((美国|PCT|加拿大){0,1})([\\u4E00-\\u9FA5]{1,8})((NO.|NOS.){1})([\\d]{5,}))";
其他代码是
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println("1:"+matcher.group(1)+"\n"
+"2:"+matcher.group(2)+"\n"
+"3:"+matcher.group(3)+"\n"
+"4:"+matcher.group(4)+"\n"
+"5:"+matcher.group(5)+"\n"
+"6:"+matcher.group(6)+"\n"
+"7:"+matcher.group(7));
}
```
我知道括号()用于启用正则表达式词组。第一组是大组。
第二组是((美国| PCT |加拿大){0,1})以匹配“美国”或“ PCT”或“加拿大”。
第三组是([\ u4E00- \ u9FA5] {1,8})以匹配长度为1到8的汉字。
第四组是((NO。| NOS。){1})以匹配NO。或NOS。第五组是([\ d] {5,})以匹配数字
但是控制台是
> 1:美国临时申请No.62004615 2:美国 3:美国 4:临时申请 5:No. 6:No. 7:62004615
组(2)与组(3)相同。组(5)与组(6)相同
似乎组(3)再次重新匹配了括号内的子括号。我想知道是否有办法只匹配最外面的括号。
理想的结果应该是
> 1:美国临时申请No.62004615 2:美国 3:临时申请 4:No. 5:62004615
问题来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。