Expression régulière et négation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Expression régulière et négation

par Sékiltoyai » 18 janv. 2008, 12:06

Tu peux faire

Code : Tout sélectionner

SELECT 'coucoutoi' REGEXP '^coucou(.*)' AND NOT REGEXP '^coucoutoi'

par praline » 18 janv. 2008, 11:38

Oui effectivement, mais ce n'est pas ce que je cherche a faire.
Je veux une chaine qui commence par "coucou" et que le mot "moi" ne doit pas suivre.
Je ne cherche pas une chaine qui commencerai par "coucoutoi" ! :D

par sadeq » 18 janv. 2008, 07:36

Hé bien, le plus simple est d'écrire :

Code : Tout sélectionner

NOT SELECT '..............' REGEXP '^coucoumoi'
Car les regexp sont faites à la base pour reconnaitre l'existence de mots et non l'inverse. Il suffit donc d'inverser le résultat.

par Sékiltoyai » 17 janv. 2008, 22:37

Euh, sadeq, que ce soit la doc fr ou en, ils ne parlent à aucun moment que le ^ peut être utilisé comme négation (à part bien sur négation de classes) :-/

par praline » 17 janv. 2008, 19:10

apparament non ... la requete suivant renvoi toujours 0, que je mettre 'coucoutoi' ou 'coucoumoi'

Code : Tout sélectionner

SELECT 'coucoutoi' REGEXP '^coucou(^(moi))'
D'après la doc, le "^" représente le début de chaine, et non la négation

par sadeq » 02 janv. 2008, 14:04

c'est le chapeau ^ qui joue le rôle de négateur, essaye l'expression :
^coucou(^(moi))

Expression régulière et négation

par praline » 02 janv. 2008, 13:53

Bonjour,

Je voudrai tester une chaine pour vérifier qu'elle commence bien par "xxxx" et que "yyyy" ne suit pas derrière (soit une négation du mot "yyyy")

Exemple: tester si la chaine "coucoutoi" commence bien par "coucou" et que le mot "moi" ne suit pas derrière (soit une négation du mot "moi")

Donc en remplaçant "expression" par a bonne expression régulière, je souhaiterait obtenir ca:

Code : Tout sélectionner

SELECT 'coucoutoi' REGEXP 'expression'
=> 1

Code : Tout sélectionner

SELECT 'coucoumoi' REGEXP 'expression'
=> 0

J'ai trouver l'expression régulière PERL qui fonctionne: ^coucou(?!(moi))
Mais mysql utilise les expression POSIX, ce qui explique le message d'erreur:

Code : Tout sélectionner

#1139 - Got error 'repetition-operator operand invalid' from regexp
Merci de votre aide !