Problème avec le ?! pour matcher un mot non suivi d'une parenthèse

Résolu
stbfr Messages postés 2 Date d'inscription vendredi 20 janvier 2012 Statut Membre Dernière intervention 9 février 2012 - 30 janv. 2012 à 20:51
stbfr Messages postés 2 Date d'inscription vendredi 20 janvier 2012 Statut Membre Dernière intervention 9 février 2012 - 9 févr. 2012 à 16:55
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
9 févr. 2012 à 08:24
^(?!\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
3
stbfr Messages postés 2 Date d'inscription vendredi 20 janvier 2012 Statut Membre Dernière intervention 9 février 2012
9 févr. 2012 à 16:55
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 !
0
Rejoignez-nous