Problème avec le ?! pour matcher un mot non suivi d'une parenthèse [Résolu]

Signaler
Messages postés
2
Date d'inscription
vendredi 20 janvier 2012
Statut
Membre
Dernière intervention
9 février 2012
-
stbfr
Messages postés
2
Date d'inscription
vendredi 20 janvier 2012
Statut
Membre
Dernière intervention
9 février 2012
-
Bonjour,

Je cale après une longue recherche sur le problème suivant :
je veux savoir à l'aide d'une Regex si dans une string j'ai une variable mais pas une fonction :
"sin(90)*3" ne me renverrait pas de match
alors que "xyy+3" me renverrait match OK.

Pour 1 seul caractère avant la parenthèse ^\w(?!\() fonctionne parfaitement mais pour plusieurs caractères je cale car ^\w+(?!\() ne fonctionne pas, il matche tous les caractères sauf le dernier situé juste avant la "(",

Que faire ???

Merci d'avance si quelqu'un peut me proposer une solution mais peut être qu'il n'y en a pas et qu'il faut passer par un if ??

2 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
^(?!\w+\()\w+

en gros, ton assertion etait bonne, mais pas complete.

tu dis :

un a n caractère alphanum, suivi de quelque chose (non matché) qui ne soit pas un (

du coup, pour le sin(90)
il retourne si

en faisant ainsi :
^(?!\w+\()\w+

ton assertion est de dire : un a n alphanum, non suivi d'une parenthese
ainsi, le sin sera ejecté dès le départ
et ton match \w+
prendra bien les variables


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
2
Date d'inscription
vendredi 20 janvier 2012
Statut
Membre
Dernière intervention
9 février 2012

Merci beaucoup pour ta réponse !!!
J'ai passé bcp de temps à y réfléchir, persuadé qu'il y avait une solution sans la trouver. Les regexp sont super puissantes mais pas forcément évidentes !!! Encore merci !