Согласно документации , \w
соответствует только [a-zA-Z_0-9]
, если не указан флаг UNICODE_CHARACTER_CLASS
:
Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS)
или встраивать (?U)
в шаблон:
Pattern.compile("(?U)\\w+")
для любого из которых требуется JDK 1.7 (т. Е. Java 7).
Если у вас нет Java 7, вы можете обобщить \w
в Unicode, используя \p{L}
(«буква»; например, [a-zA-Z]
, но не специфично для ASCII) и \p{N}
(«число»; например, [0-9]
, но не специфично для ASCII):
Pattern.compile("[\\p{L}_\\p{N}]+")
Но это звучит какМожет быть, вы ищете слова в обычном смысле (в отличие от языка программирования), и вам не нужно поддерживать цифры и подчеркивания?В этом случае вы можете просто использовать \p{L}
:
Pattern.compile("\\p{L}+")
(Кстати, фигурные скобки на самом деле необязательны - вы можете написать \pL
вместо p{L}
и \pN
вместо\p{N}
- но люди обычно включают их в любом случае, потому что они требуются для многобуквенных категорий, таких как \p{Lu}
"прописная буква".)