Регулярные выражения Буквы
Как в Java 8 оставлять только буквы и числа всех алфавитов, используя регулярные выражения? либо другим способом. К примеру, такой кода
String s = "Hello, world. Привет 異體字 мир 123 456 789 "+ "\n" +"~d!f@q#t$.%^&*()`☻";
String e = s.replaceAll("[^A-Za-zА-Яа-я0-9]", " ");
обрежет также и 異體字, которые необходимо оставить. есть вариант не перчислять все кодировки? (по типу A-Za-z)
Ответы (3 шт):
На мой взгляд вам проще всего составить регулярное выражение не с охватом диапазонов, а наоборот, с исключением ненужных символов.
[^`~!@"#№;$%^:?&*()_\-+=\/+{\[\]}\\|;"'<,>.?,]
Но, конечно, надо смотреть на ситуацию. Возможно, такой вариант вам тоже не подойдёт, потому что введено может быть реально что угодно. Тогда используйте unicode-диапазоны, в частности для иероглифов: ссылка.
можно так
String regex="([A-z]||[А-я]||[0-9]||,||!||\\.||\\?|| )*"; //принимает латиницу, кирилцу, знаки припинания( "." "," "!" "?") и пробел в любом порядке и в любом количестве.
String text="Hyffюю, .?!";
text.matches(regex) ;//даный метод сверяет текст с регулярным выражением если схожи то возрашаит true иначи false
Насколько я помню, в Java8 regexp есть поддержка \p подробнее: www.regular-expressions.info
String s = "Hello, world. Привет 異體字 мир 123 456 789 "+ "\n" +"~d!f@q#t$.%^&*()`☻";
String e = s.replaceAll("[^\\p{L}\\p{N}]+", " ");
Результатом будет:
Hello world Привет 異體字 мир 123 456 789 d f q t
Если убрать квантификатор + то результат будет выглядеть так
Hello world Привет 異體字 мир 123 456 789 d f q t
\p{L} или \p{Letter} - любые буквы любого языка
\p{N} или \p{Number} - любые виды цифровых символов в любых языках
Подробнее: wikipedia.org