Normalerweise würde man positive Lookahead-Assertionen verwenden für diese Aufgabe, aber die Regex-Engine von MySQL unterstützt sie nicht.
Daher besteht Ihre einzige Option (wenn Sie dies in einer einzigen Regex tun möchten) darin, beide Varianten zu behandeln (hello
nach red
oder hello
vor red
) "manuell":
hello.*red|red.*hello
Für zwei "Suchwörter" ist das wahrscheinlich akzeptabel - es lässt sich aber nicht gut skalieren.
Ihr regulärer Ausdruck ((hello|red).*){2}()*
ist etwas seltsam; es bedeutet
( # 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...
das passt also zu hello foo hello
oder red bar red
auch.