J'ai un problème spécifique.
J'ai par exemple: Hello little, hello red, sometime and now
.
J'ai besoin d'expressions rationnelles à quoi ressemblera si la clause contient à la fois hello
et red
.
J'ai complet une regexp ((hello|red).*){2}()*
ce qui ne fonctionnera que si dans la clause un mot hello
et un mot red
, mais dans mon article deux mots hello
et regexp
travaillera sans mot red
, Qu'est-ce qui ne va pas:(
J'ai besoin de regexp ce qui ne correspond que si cause contient le mot hello
et mot red
et ne dépend pas de répéter l'un d'eux.
S'il vous plaît aider.
THX.
Réponses:
4 pour la réponse № 1Habituellement, on utiliserait affirmations positives d'anticipation pour cette tâche, mais le moteur de regex de MySQL ne les prend pas en charge.
Par conséquent, votre seule option (si vous voulez le faire dans une seule expression rationnelle) 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 va pas très 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...
alors cela correspond hello foo hello
ou red bar red
ainsi que.
2 pour la réponse № 2
Je ne suis pas sûr que cela résoudra votre problème, mais voici ma solution:
.*(hello.*red|red.*hello).*
Voici une démo en ligne avec une explication complexe de son fonctionnement: http://regex101.com/r/eL3wA0
0 pour la réponse № 3
Cela peut dépendre de ce que vous voulez faire, mais je pense que la regex est un peu exagéré pour la tâche.
Que diriez-vous d'un simple:
WHERE col LIKE "%red%"
AND col LIKE "%hello%"