Регулярное выражение для поиска вида: слово1 * (слово2 -слово3 -слово4) * слово5
^слово1(?=.*слово2)(?!.*слово3|.*слово4).*слово5$
Регулярное выражение при котором, строка начинается со слова слово1, заканчиваться словом слово5. Если между слово1 и слово5, есть слова слово3 или слово4 — строка не удовлетворяет шаблон. Так же обязательно между словами слово1 и слово5 должно встретится слово слово2.
if(preg_match("#^слово1(?!.*слово2|.*слово3|.*слово4).*слово5$#isU","слово1 слово99 слово4 слово98 слово97 слово5")){
	echo 1;
} else {
	echo 2;
}


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

Как уже и говорил — все работает!