В Java символом является \pS
, который не совпадает с символами пунктуации, которые \pP
.
Я говорю об этой проблеме, а также перечисляю типы для всех знаков ASCII и символов, здесь, в этом ответе .
Шаблоны типа [\p{Alnum}\s]
работают только с устаревшими наборами данных 1960-х годов.Чтобы работать с вещами с набором нативных символов Java, вам нужно что-то порядка
identifier_charclass = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
whitespace_charclass = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";
ident_or_white = "[" + identifier_charclass + whitespace_charclass + "]";
Я сожалею, что Java затрудняет работу с современным набором данных, но, по крайней мере, это возможно.
Только не спрашивайте о границах или кластерах графем.Об этом см. мои другие сообщения .