/ / MySQL REGEXP et mots répétés - mysql, regex

MySQL REGEXP et mots répétés - mysql, regex

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 № 1

Habituellement, 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%"