Почему это регулярное выражение cat не соответствует целевому символу, когда китайский символ перед целевым символом - PullRequest
0 голосов
/ 19 марта 2020

У меня есть регулярное выражение

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...