У меня есть строка типа
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));
}
Я знаю, используются круглые скобки () включить группировку регулярных выражений. И группа 1 - большая группа.
Вторая группа ((美国 | PCT | 加拿大) {0,1}) соответствует «美国», «PCT» или «加拿大». Третья группа is ([\ u4E00- \ u9FA5] {1,8}) для соответствия китайскому символу, длина которого составляет от одного до восьми. Четвертая группа ((NO. | NOS.) {1}) соответствует NO , или нет. Пятая группа ([\ 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