Чтобы соответствовать A-Z, мы будем использовать регулярное выражение:
[A-Za-Z]
Как разрешить регулярное выражение соответствовать символам utf8, введенным пользователем? Например, китайские слова, такие как 环保 部
Чтобы соответствовать 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 для предопределенных классов символов см. мой ответ здесь для получения более подробной информации и ссылок p >
Вы можете сделать что-то вроде этого
Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);
и \w
будут соответствовать всем буквам и всем цифрам с любых языков (и, конечно, некоторое слово, объединяющее символы, такие как _
).
Чтобы соответствовать отдельным символам, вы можете просто включить их в класс символов, либо как литералы, либо через синтаксис \u03FB
.
Очевидно, вы часто не можете перечислить все допустимые символы в идеографических языках. Чтобы регулярное выражение обрабатывало символы Юникода в соответствии с их типом или блоком кода, поддерживаются различные другие экраны, которые определены здесь. Посмотрите раздел "Поддержка Unicode", в частности ссылки на класс 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());
char
char
неявно UTF-16Unicode - это универсальный набор символов, и UTF-8 может описать все его (включая контрольные символы, знаки препинания, символы, буквы и т.д.). Вы должны быть более конкретными относительно того, что вы хотите включить и что хотите исключать. Регулярные выражения Java используют синтаксис \p{category}
для сопоставления кодовых страниц category. См. Unicode standard для списка категорий.
Если вы хотите идентифицировать и разделить слова в последовательности идеографов, вам нужно будет взглянуть на более сложный API. Я бы начал с типа BreakIterator
.