У меня есть регулярное выражение
String regex = "((美国|加拿大)?([\\u4E00-\\u9FA5]{1,8})(NO.|NOS.)([\\d]{5,}))";
Регулярное выражение (美国 | PCT | 加拿大)? соответствовать "美国" или "PCT" или "加拿大", или нет (название страны на китайском языке)
Регулярное выражение ([\ u4E00- \ u9FA5] {1,8}) означает совпадение от 1 до 8 китайских символов Полный код:
String str = "美国临时申请No.62004615";
str = str.replaceAll("[()()\\-,,/\\s【】\\[\\]]","");
System.err.println(str);
String regex = "((美国|加拿大)?([\\u4E00-\\u9FA5]{1,8})(NO.|NOS.)([\\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");
}
В этой ситуации:
matcher.group(2)
выведите «美国». Но если это китайский символ перед "美国", например, str = "国 美国 临时 申请 No.62004615"
matcer.matcher.group(2)
, то выведите null.
Но если это английский sh символ перед "美国", например str = "US 美国 临时 申请 No.62004615";
matcer.matcher.group (2), выводит "美国"
Может кто-нибудь сказать мне, почему "
match.group (2)"не может соответствовать"
美国", когда перед символом"
美国"。 находятся китайские иероглифы (когда str = "你好 美国 临时 申请 No.62004615")