Java regex работает в моей системе, но не на сервере

1

Регулярное выражение

String regex = "^[\\p{IsHangul}\\p{IsDigit}]+";

И всякий раз, когда я

text.matches(regex);

Он отлично работает в моей системе, но не в некоторых системах. Я не могу отслеживать эту проблему.

Заранее спасибо.

Исключение:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown character property name {Hangul} near index 13
^[\p{IsHangul}\p{IsDigit}]+
             ^
       at java.util.regex.Pattern.error(Pattern.java:1713)
       at java.util.regex.Pattern.charPropertyNodeFor(Pattern.java:2437)
       at java.util.regex.Pattern.family(Pattern.java:2412)
       at java.util.regex.Pattern.range(Pattern.java:2335)
       at java.util.regex.Pattern.clazz(Pattern.java:2268)
       at java.util.regex.Pattern.sequence(Pattern.java:1818)
       at java.util.regex.Pattern.expr(Pattern.java:1752)
       at java.util.regex.Pattern.compile(Pattern.java:1460)
       at java.util.regex.Pattern.<init>(Pattern.java:1133)
       at java.util.regex.Pattern.compile(Pattern.java:823)
       at java.util.regex.Pattern.matches(Pattern.java:928)
       at java.lang.String.matches(String.java:2090)
       at com.mycompany.helper.ApplicationHelper.main(ApplicationHelper.java:200)
  • 0
    в чем ошибка в другой системе?
  • 0
    Извините, я сбежал {и} потому что для теста. и «другая система» означает «другая JVM».
Показать ещё 16 комментариев
Теги:
string

2 ответа

1
Лучший ответ

Кажется, что используемая вами версия Java не может распознать Hangul как правильный символ сценария, поэтому вы можете попытаться создать свой собственный класс символов, который будет охватывать тот же диапазон, что и у Hongul, из более новых версий Java.

Из того, что я вижу в коде в исходном коде Character.UnicodeScript на Java 8 Hangul, относится к диапазонам Unicode

  • 1100..11FF
  • 302E..302F
  • 3131..318F
  • 3200..321F
  • 3260..327E
  • A960..A97F
  • AC00..D7FB
  • FFA0..FFDF

поэтому, возможно, попробуйте с таким шаблоном

Pattern.compile("^["
        + "\u1100-\u11FF"
        + "\u302E-\u302F"
        + "\u3131-\u318F"
        + "\u3200-\u321F"
        + "\u3260-\u327E"
        + "\uA960-\uA97F"
        + "\uAC00-\uD7FB"
        + "\uFFA0-\uFFDF"
        + "\\p{IsDigit}]+");
  • 0
    Благодарю вас. Теперь работает нормально.
  • 0
    Добро пожаловать.
2

Согласно использованию регулярных выражений в Java:

Java 5 исправляет некоторые ошибки и добавляет поддержку блоков Unicode...

Убедитесь, что вы используете Java 5+ на сервере.

  • 0
    в любом случае, спасибо. но "IsHangul" будет работать только с Java 1.7. Благодарю вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню