Habituellement, on utiliserait des des assertions d'anticipation positives pour cette tâche, mais le moteur regex de MySQL ne les prend pas en charge.
Par conséquent, votre seule option (si vous souhaitez le faire dans une seule expression régulière) est de gérer les deux variantes (hello
après red
ou hello
avant red
) "manuellement":
hello.*red|red.*hello
Pour deux "mots de recherche", c'est probablement acceptable - cela ne s'adapte pas bien, cependant.
Votre regex ((hello|red).*){2}()*
est un peu étrange; ça veut dire
( # 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...
donc cela correspond à hello foo hello
ou red bar red
aussi.