2009-05-27 2 views
2

У нас есть текущий метод, который очищает из символов, которые не являются алфавитный или пробелы, который является простоПоддержка java regex для значений non-ascii?

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

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

ответ

2

Java 6 Pattern обрабатывает Unicode, см. this doc.

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

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

Смежные вопросы