Задать вопрос
liaren
@liaren
Фрилансер, опенсорсер, тех лид

Регулярное выражение для поиска вида: слово1 * (слово2 -слово3 -слово4) * слово5

Т.е. вопрос в том, как будет выглядеть регулярное выражение, которое должно искать последовательные наборы слов с исключением ряда слов внутри отдельных кусков текста?

Например для запроса вида:

слово1 * (слово2 -слово3 -слово4) * слово5

Соответствубющими строками будут:

слово1 слово99 слово2 слово98 слово97 слово5
слово1 слово2 слово5

Не соответствующими:

слово1 слово99 слово2 слово98 СЛОВО4 слово97 слово5
слово1 СЛОВО3 слово2 слово5

Второй день бьюсь над этой задачей…
Буду очень благодарен если кто-нибудь поможет.

P.S. Это всё пишется для поиска по MySQL базе с использованием оператора REGEXP. Вариант с использованием Sphinx не подходит.
  • Вопрос задан
  • 7855 просмотров
Подписаться 5 Оценить Комментировать
Ответ пользователя Иван Гарбуз К ответам на вопрос (5)
Пример на PHP:
if(preg_match("#^слово1.*(слово2|слово3|слово4).*слово5$#isU","слово1 слово99 слово2 слово98 слово97 слово5")){
	echo 1;
} else {
	echo 2;
}

if(preg_match("#^слово1.*(слово2|слово3|слово4).*слово5$#isU","слово0 слово99 слово2 слово98 слово97 слово5")){
	echo 1;
} else {
	echo 2;
}

if(preg_match("#(?<!Сергей )Иванов#isU","Игорь Иванов")){
	echo 1;
} else {
	echo 2;
}

if(preg_match("#(?<!Сергей )Иванов#isU","Сергей Иванов")){
	echo 1;
} else {
	echo 2;
}
Ответ написан