4 ответов:
то, что вы ищете свойства Юникода.
например
\p{L}это любой вид письма с любого языкатаким образом, регулярное выражение, соответствующее такому китайскому слову, может быть чем-то вроде
\p{L}+есть много таких свойств, для получения более подробной информации см. regular-expressions.info
другой вариант - использовать модификатор
Pattern.UNICODE_CHARACTER_CLASSв Java 7 есть новое свойство
Pattern.UNICODE_CHARACTER_CLASSчто позволяет Юникод версия предопределенных классов символов смотрите мой ответ здесь для получения более подробной информации и ссылкивы могли бы сделать что-то подобное
Pattern p = Pattern.compile("\w+", Pattern.UNICODE_CHARACTER_CLASS);и
\wбудет соответствовать всем буквам и всем цифрам из любых языков (и, конечно, некоторые слова, сочетающие символы, такие как_).
чтобы соответствовать отдельным символам, вы можете просто включить их в класс символов a, либо в виде литералов, либо через
\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());
- API регулярных выражений Java работает на
charтип- the
charтип неявно UTF-16- если у вас есть данные UTF-8, вам нужно будет перекодировать их в UTF-16 на входе, если это еще не сделано
Unicode-это универсальный набор символов, и UTF-8 может описать все это (включая контрольные символы, знаки препинания, символы, буквы и т. д.) Вы должны быть более конкретными о том, что вы хотите включить и что вы хотите исключить. Регулярные выражения Java используют
\p{category}синтаксис, чтобы соответствовать кодов на категория. Смотрите стандарт Unicode на список категорий.если вы хотите идентифицировать и разделять слова в последовательности идеограмм, вам нужно будет посмотреть на более сложный API. Я бы начал с
BreakIteratorтип.
Comments