Zwykle używa się pozytywnych asercji z wyprzedzeniem do tego zadania, ale silnik regex MySQL ich nie obsługuje.
Dlatego jedyną opcją (jeśli chcesz to zrobić w jednym wyrażeniu regularnym) jest obsługa obu odmian (hello
po red
lub hello
przed red
) "ręcznie":
hello.*red|red.*hello
W przypadku dwóch „wyszukiwanych słów” jest to prawdopodobnie akceptowalne – jednak nie skaluje się ładnie.
Twoje wyrażenie regularne ((hello|red).*){2}()*
jest trochę dziwny; to znaczy
( # Start of group:
(hello|red) # Match either hello or red
.* # Match any number of characters
){2} # Match this group twice
()* # Match the empty string any number of times...
więc to pasuje do hello foo hello
lub red bar red
również.