Что означает это регулярное выражение в Java? - PullRequest
1 голос
/ 16 августа 2011

Мы отлаживаем старый код и сталкивались с этим утверждением, кто-нибудь знает, что он делает?

String value=...
value.toLowerCase(Locale.ENGLISH).split("[^\\w]+");

Ответы [ 3 ]

4 голосов
/ 16 августа 2011

Ответ в том, что он делает много вещей довольно наивно. Почему иначе они использовали бы отрицательный символьный класс слова символ [^\w] для того, что можно было бы более легко найти в простом \W? Не имеет никакого смысла.

Кроме того, глупость локали говорит о том, что они должны бояться, что они в Турции, поскольку я не знаю других локалей, кроме турецкого и азербайджанского, где когда-либо существует разница в обсадной колонне. Обычно LATIN CAPITAL LETTER I, как и следовало ожидать, строчные буквы LATIN SMALL LETTER I, но в тюркских языках это строчные буквы LATIN SMALL LETTER I.

Несмотря на это, он не будет работать правильно для Unicode, если они не используют встроенный флаг "(?U)", доступный только в Java 7. Вы не можете заставить \w и \W играть по правилам Unicode просто так глупо бессмысленная локаль вещь. Вы должны использовать "(?U)", или, если вы на самом деле компилируете шаблон, флаг UNICODE_CHARACTER_CLASSES. Оба из них нуждаются в Java 7. До этого Java хуже, чем просто бесполезен для обработки Unicode с помощью таких сочетаний клавиш регулярного выражения в виде символов. Это на самом деле вводит в заблуждение, неправильно и вредно.

В противном случае глупый человек будет думать, что обычное английское слово, такое как наивно , имеет два слова, разделенных последовательностью без слов. Это супер глупо.

Поэтому, отвечая на ваш вопрос, я не думаю, что он делает то, что думает его автор. Я гарантирую вам, что он сломан, если это не полностью текст ASCII. Смотрите здесь о адских вещах, которые произошли до Java 7, и о том, что вам нужно было сделать, чтобы обойти их, и смотрите здесь , чтобы узнать о том, что Java 7 привносит в таблицу.

3 голосов
/ 16 августа 2011

Похоже, что он разбивается на подстроки несловесных символов (представленных [^\w]) в слова.

0 голосов
/ 16 августа 2011

Залить строку в каждой группе несловарных символов.символ слова - это буква, цифра или подчеркивание.Строка разбивается на группы чего-либо еще.

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