поддержка регулярных выражений Java для не-ASCII значений? - PullRequest
2 голосов
/ 28 мая 2009

У нас есть текущий метод, который очищает символы, которые не являются алфавитными или пробелами, который просто

String clean(String input)
{
   return input==null?"":input.replaceAll("[^a-zA-Z ]","");
}

, которое действительно должно быть исправлено для поддержки неанглийских символов (например, ś, ũ, ...). К сожалению, классы Java регулярных выражений (например, "\ W" - несловесный символ, "\ p {Alpha}" -US-ASCII только}. Кажется, это не поддерживается. Есть ли способ сделать это с помощью регулярного выражения Java, а не зацикливание вручную, хотя каждый символ, чтобы проверить это?

1 Ответ

2 голосов
/ 28 мая 2009

Шаблон Java 6 обрабатывает Unicode, см. этот документ .

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

Unicode блоки и категории записано с помощью конструкций \ p и \ P как в Perl. \ p {prop} соответствует, если вход имеет свойство prop, в то время как \ P {prop} не совпадает, если ввод имеет это свойство. Блоки указывается с префиксом В, как в InMongolian. Категории могут быть указывается с дополнительным префиксом Is: И \ p {L}, и \ p {IsL} обозначают категория Юникод букв. Блоки и категории могут быть использованы как внутри и вне класса персонажей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...