JavaRush /Java блог /Архив info.javarush /Регулярные выражения: найти слово/часть слова
eGarmin
41 уровень

Регулярные выражения: найти слово/часть слова

Статья из группы Архив info.javarush
Если требуется найти слово или подстроку, хорошим решением будет использовать оператор контроля из инструментария регулярных выражений. Он незаменим в случаях, если вам требуется найти что-нибудь, следующее за чем-нибудь еще.
Простой пример
String str = "программируем"; Pattern p = Pattern.compile(".*программ(?=ируем).*"); Matcher m = p.matcher(str); if(m.matches()){ System.out.println("Нашел!"); }else{ System.out.println("Не нашел!"); }
1. Поиск спереди
В примере выше, если нужно найти "программируем", но не надо искать "программирую", следует использовать следующий паттерн: .*программ(?=ируем).* ?= – поиск спереди на наличие слова/части слова; ?! – поиск спереди на отсутствие слова/части слова.
2. Поиск сзади
Поиск сзади работает схожим образом. Нужно использовать ?<= для поиска на наличие слова/части слова сзади и ?.*(?<=программ)ируем.* Слово «программируем» соответствует данному шаблону, а слово «полируем» – нет.
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
maks1m Уровень 25
26 июня 2014
Капля в море из регулярных выражений :)
Вот если бы обширный мануал по регулярным выражениям написали — было бы круто :)
eGarmin Уровень 41
21 июня 2014
Это перевод статьи X Wang с сайта programcreek.com. Как мне кажется, в том виде в каком эта конструкция применяется в статье, она не особо полезна, т.к. можно просто написать .*программируем.* безо всякого выпендрежа. Зато может быть гораздо полезнее искать спереди/сзади на предмет отсутствия какого-нибудь окончания/приставки, при помощи вариантов ?! и ?<!