Вопрос

Есть много вопросов и ответов здесь на Stackoverflow, которые предполагают, что «буква» может быть сопоставлено в режиме Regexp [a-zA-Z]. Анкет Однако с Unicode есть гораздо больше персонажей, которые большинство людей считают буквой (все греческие буквы, Cyrllic ... и многое другое. Unicode определяет много блоков каждый из которых может иметь «буквы».

Определение Java Определяет классы POSIX Для таких вещей, как альфа-персонажи, но это указано только для работы с США-Аска. Предопределенные классы символов определяют слова для состояния [a-zA-Z_0-9], который также исключает много букв.

Итак, как вы правильно сочетать с строками Unicode? Есть ли другая библиотека, которая получает это правильно?

Это было полезно?

Решение

Здесь у вас есть очень хорошее объяснение:

http://www.regular-expressions.info/unicode.html

Некоторые намеки:

"Java и .net, к сожалению, не поддерживают \X (пока что). Использовать \P{M}\p{M}* как замена. Чтобы соответствовать любому количеству графем, используйте (?:\P{M}\p{M}*)+ вместо \X+."

"В Java, токен режима режима \uFFFF Только соответствует указанной кодовой точке, даже если вы включили каноническую эквивалентность. Однако тот же синтаксис \uFFFF также используется для вставки символов Unicode в буквальные строки в исходном коде Java. Pattern.compile("\u00E0") соответствует как одноконтрон à, пока Pattern.compile("\\u00E0") Соответствует только однопорядной версии. Помните, что при написании корпорации в виде буквальной буквы Java Backslash необходимо избежать. Бывший код Java компилирует корпус à, пока последний компилирует \u00E0. Анкет В зависимости от того, что вы делаете, разница может быть значительной ».

Другие советы

Вы говорите о категориях Unicode, как буквы? Они соответствуют регуляции формы \p{CAT}, где «кошка» - это код категории L для любого письма или подкатегории, подобной Lu для прописного или Lt Для титульного казыW.

Цитируя из Javadoc java.util.regex.pattern.

Поддержка Unicode

Этот класс в соответствии с уровнем 1 технического стандарта Unicode #18: Руководящие принципы регулярного выражения Unicode, плюс канонические эквиваленты RL2.1.

Последовательности побега Unicode, такие как U2014 в исходном коде Java, обрабатываются, как описано в §3.3 спецификации языка Java. Такие последовательности побега также реализуются непосредственно анализатором регулярной экспрессии, так что уход Unicode можно использовать в выражениях, которые считываются из файлов или с клавиатуры. Таким образом, строки « u2014» и « u2014», хотя и не равны, компилируются в тот же шаблон, который соответствует персонажу с шестнадцатеричным значением 0x2014.

Блоки Unicode и категории написаны с конструкциями p и p, как в Perl. p {prop} соответствует, если у ввода есть Prop -Prop, а p {prop} не совпадает, если у ввода есть это свойство. Блоки указаны с префиксом в, как во Inmongolian. Категории могут быть указаны с помощью необязательного префикса: оба p {l} и p {ISL} обозначают категорию букв Unicode. Блоки и категории могут использоваться как внутри, так и снаружи класса символов.

Поддерживаемые категории являются категориями стандарта Unicode в версии, указанной классом символов. Названия категорий определены в стандарте, как нормативные, так и информативные. Имена блоков, поддерживаемые шаблоном, являются допустимыми именами блоков, принятыми и определены Unicodeblock.forname.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top