Регулярное выражение для поиска слов в тексте
Есть необходимость создать такое регулярное выражение, которое бы искало в тексте все слова с чёрточкой (например: механик-водитель, лётчик-испытатель, Санкт-Петербург, тук-тук и т. п.), но при этом исключало бы из поиска конкретные слова с чёрточкой (например: из-за, кое-как, кому-либо, по-настоящему и т. п.). Спасибо!
Ответы (2 шт):
Находим все слова с дефисом. В PHP, например,
regex_full_match([а-яА-ЯёЁ]+-[а-яА-ЯёЁ]+)Имеем словарь "стоп-слов".
Исключаем из найденных слов все слова из списка "стоп-слов"
Писать сразу регулярное выражение, в котором будет список "стоп-слов" не эффективно.
Спасибо! А всё-таки как добавить к этому выражению список "стоп-слов"?
Нужно использовать отрицательное look-behind условие
Пример на PHP:
$text = "механик-водитель, лётчик-испытатель, Санкт-Петербург,
тук-тук из-за, кое-как, кому-либо, по-настоящему";
if(preg_match_all('~\b[а-яё]+-[а-яё]+\b(?<!из-за|кое-как|кому-либо|по-настоящему)~iu',
$text, $m)) {
var_dump($m);
}
Вывод:
array(1) {
[0]=>
array(4) {
[0]=>
string(31) "механик-водитель"
[1]=>
string(33) "лётчик-испытатель"
[2]=>
string(29) "Санкт-Петербург"
[3]=>
string(13) "тук-тук"
}
}