2016-12-15 3 views
1

j'ai cette expression REGEX que j'utilise pour trouver mot dans un texte par une requête SQLParenthese regex dans la capture groupe

[SQL QUERY] where REGEX concat(^|’| | | |\'|>|-)','Mercure','(| | |.|,|<|-) = 1 

qui fonctionnent de la façon dont je veux (pour certaines raisons, les frontières traditionnelles de mots ne le font pas fait le travail). Je voudrais ajouter à chaque groupe de capture respectivement une parenthèse ouvrante et une parenthèse fermante. Mais lorsque je tente:

(^|’| | | |\'|>|-|\()','Mercure','(| | |.|,|<|-|\)) 

Puis-je obtenir une erreur avec mon script PHP, bien que regex101 ne semble pas trouver cela étrange. Est-ce que quelqu'un a une idée de comment résoudre cela?

+0

Veuillez coller votre code PHP. –

+1

Peut-être que vous voulez 'REGEX concat (' [[: <:]] ',' Mercure ',' [[:>:]] ') 'si vous avez besoin de faire correspondre des mots entiers avec MySQL? –

+0

Merci beaucoup Wiktor: mais ces limites de mots traitent-elles de cas comme l'apostrophe? comme dans le "j'aime" français, aime doit être considéré comme un mot entier. Je pense que c'est la raison pour laquelle j'ai choisi de le faire à l'époque. Je voudrais me tromper, cependant: c'est bien mieux ... – DonRamiro

Répondre

1
WHERE col REGEXP "(^|[’ '>-])Mercure[ .,<-]" 

Je ne comprends pas avoir plusieurs espaces.

Il n'est pas facile de rechercher > correspondant seulement à < - ce qui demanderait probablement une longue liste de choix.

Une façon d'aborder le problème (si elle est complexe) est de faire que ce MySQL:

WHERE col LIKE '%Mercure%' 

puis utilisez le code PHP pour filtrer les lignes qui ne correspondent pas aux conditions limites complexes.

+0

Merci pour cet excellent conseil! – DonRamiro

+0

Oops - Il y a un défaut. 'REGEXP' ne fonctionne qu'avec des octets, pas des caractères multi-octets tels que' ''. L'expression rationnelle ne va pas «échouer», mais elle peut être drôle dans certaines situations. –