Возможно, вы захотите взглянуть на Поддержка Unicode в Java
Я думаю, что в основном вам нужно свойство Unicode \p{L}
. Это будет соответствовать любой кодовой точке, которая имеет свойство "буква".
Так что ваше регулярное выражение может выглядеть так
Pattern p=Pattern.compile("[\\p{L}/]");
Я только что заменил диапазоны символов a-zA-Z
на \p{L}
Начиная с Java 7 вы также можете использовать Pattern.UNICODE_CHARACTER_CLASS
Включает версию предопределенных классов символов и классов символов POSIX в Unicode.
Это превратит предопределенный \w
в версию Unicode, означает, что он будет соответствовать всем буквам и цифрам Unicode (и символам, соединяющим строки, например _)
Таким образом, чтобы соответствовать вашей строке コメント_1050_固-減価償却費
, вы можете использовать
Pattern p=Pattern.compile("^\\w+$", Pattern.UNICODE_CHARACTER_CLASS);
Это будет соответствовать любой строке, состоящей из букв, цифр и _
Подробнее см.
и здесь регулярное выражение.info обзор сценариев, свойств и блоков Unicode.
Смотрите здесь известный ответ от tchrist о предостережениях регулярных выражений в Java, включая обновленное то, что изменилось с Java 7 (или будет в Java 8)