Ответ в том, что он делает много вещей довольно наивно. Почему иначе они использовали бы отрицательный символьный класс слова символ [^\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 привносит в таблицу.