Java regex для поддержки Unicode?

Для соответствия A-Z мы будем использовать регулярное выражение:

[A-Za-Z]

Как разрешить регулярное выражение соответствовать символам utf8, введенным пользователем? Например, китайские слова, такие как 环保 部

Что вы ищете, это свойства Unicode.

например, \p{L} – любая буква с любого языка

Таким образом, регулярное выражение, соответствующее такому китайскому слову, может быть чем-то вроде

 \p{L}+ 

Есть много таких свойств, более подробно см. Regular-expressions.info

Другой вариант – использовать модификатор

Pattern.UNICODE_CHARACTER_CLASS

В Java 7 есть новое свойство Pattern.UNICODE_CHARACTER_CLASS которое разрешает версию Unicode для предопределенных classов символов, см. Мой ответ здесь для получения более подробной информации и ссылок

Вы могли бы сделать что-то вроде этого

 Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS); 

и \w будет соответствовать всем буквам и всем цифрам с любых языков (и, конечно, некоторое слово, объединяющее символы типа _ ).

Чтобы сопоставить отдельные символы, вы можете просто включить их в class символов, либо в виде литералов, либо через синтаксис \u03FB .

Очевидно, что вы часто не можете перечислить все допустимые символы в идеографических языках. Чтобы регулярное выражение обрабатывало символы юникода в соответствии с их типом или блоком кода, поддерживаются различные другие escape-последовательности, которые определены здесь . Посмотрите раздел «Поддержка Unicode», в частности ссылки на class Character и на стандарт Unicode.

Чтобы обратиться к поддержке NLS и не принимать английский специальный характер, мы можем использовать шаблон ниже …

[a-zA-Z0-9 \ u0080- \ u9fff] * +

Для ссылки на кодовую точку UTF: http://www.utf8-chartable.de/unicode-utf8-table.pl

Фрагмент кода:

  String vowels = "అఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ"; String consonants = "కఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహ"; String signsAndPunctuations = "కఁకంకఃకాకికీకుకూకృకౄకెకేకైకొకోకౌక్కౕకౖ"; String symbolsAndNumerals = "౦౧౨౩౪౫౬౭౮౯"; String engChinesStr = "ABC導字會"; Pattern ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU = Pattern .compile("[a-zA-Z0-9 \\u0c00-\\u0c7f]*+"); System.out.println(ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU.matcher(vowels) .matches()); Pattern ALPHANUMERIC_AND_SPACE_PATTERN_CHINESE = Pattern .compile("[a-zA-Z0-9 \\u4e00-\\u9fff]*+"); Pattern ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN = Pattern .compile("[a-zA-Z0-9 \\u0080-\\u9fff]*+"); System.out.println(ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN.matcher(engChinesStr) .matches()); 
  • API регулярного выражения Java работает с типом char
  • тип char неявно UTF-16
  • если у вас есть данные UTF-8, вам необходимо перекодировать его на UTF-16 на входе, если это еще не сделано

Unicode – это универсальный набор символов, и UTF-8 может описать все его (включая контрольные символы, знаки препинания, символы, буквы и т. Д.). Вы должны быть более конкретными относительно того, что вы хотите включить, и того, что вы хотите исключить. Регулярные выражения Java используют синтаксис \p{category} для соответствия кодовым точкам по категориям . См. Стандарт Unicode для списка категорий.

Если вы хотите идентифицировать и разделить слова в последовательности идеографов, вам нужно будет взглянуть на более сложный API. Я бы начал с типа BreakIterator .

  • Как преобразовать значение unichar в NSString в Objective-C?
  • Обработка Юникода в C ++
  • Чтение электронной почты с использованием Pop3 в C #
  • File.listFiles () управляет именами Unicode с JDK 6 (проблемы с нормализацией Unicode)
  • Кодирование FPDF utf-8 (HOW-TO)
  • Есть ли способ проверить, является ли текст Unicode на определенном языке?
  • Символы Unicode в исходных файлах MATLAB
  • Должен ли я поддерживать Unicode в паролях?
  • Что такое параметр _snowman в Ruby on Rails 3?
  • Поддерживает ли MySQL Regexp соответствие Unicode
  • установка UTF-8 в java и csv-файле
  • Давайте будем гением компьютера.