Vanligtvis skulle man använda positiva framsyningspåståenden för denna uppgift, men MySQL:s regexmotor stöder dem inte.
Därför är ditt enda alternativ (om du vill göra detta i ett enda regex) att hantera båda varianterna (hello
efter red
eller hello
före red
) "manuellt":
hello.*red|red.*hello
För två "sökord" är det förmodligen acceptabelt - det skalar dock inte bra.
Ditt regex ((hello|red).*){2}()*
är lite konstigt; det betyder
( # 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...
så det här matchar hello foo hello
eller red bar red
likaså.