Обикновено човек би използвал положителни твърдения за очакване за тази задача, но механизмът за регулярни изрази на MySQL не ги поддържа.
Следователно единствената ви опция (ако искате да направите това в един регулярен израз) е да обработите и двата варианта (hello
след red
или hello
преди red
) "ръчно":
hello.*red|red.*hello
За две „думи за търсене“ това вероятно е приемливо – обаче не се мащабира добре.
Вашият регулярен израз ((hello|red).*){2}()*
е малко странно; това означава
( # 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...
така че това съвпада с hello foo hello
или red bar red
както и.