Expressions régulières début et fin de mot

WRInaute discret
Bonjour à tous,

Encore une fois, j'ai besoin de votre aide pour une expression régulière qui me pose problème depuis plusieurs jours.

J'explique : J'ai besoin d'isoler des formules en expressions régulières.
Code:
1) gen(formule(D5 , 'd'),formule(D3,'r'))
2) formule(D53,'g')
3) formule(D5,'m')

Pour cela j'ai fait simplement :
Code:
formule\(.*\)

Cela fonctionne très bien pour les lignes 2 et 3, mais pour la ligne 1, la virgule se sélectionne aussi.

Ce que je cherche à faire, c'est de lui dire de commencer au mot "formule", et de s'arrêter à la première parenthèse fermante qu'il trouve..

J'ai essayé avec \b pour le début et fin de mot, mais rien n'y fait..

Merci pour votre aide.

Orsam
 
WRInaute accro
on peut éviter la "gourmandise" des expressions régulières en ajoutant un ? après le .*
ce qui donnerait
Code:
formule\(.*?\)
sinon au lieu de mettre
Code:
 .*
, il faudrait mettre
Code:
 [^\)]+
, comme cela il prendra l'expression la plus restreinte

un très bon programme pour tester les regex http://www.weitz.de/regex-coach/ :wink:
 
WRInaute discret
Ca marche très bien... Un grand merci.

Pour mes tests d'expression régulières j'utilise ceci :
http://www.gethifi.com/tools/regex#

Une autre petite question quand même (vue que tu es lancé :lol: )...

Est-il possible de chercher une chaine, dans une chaine ?

Voici ma chaine :
Code:
((H) AND (toto) OR (titi) AND (test))

Donc dans l'idée, j'ai fait ça :
Code:
\({2}.*\){2}

Code:
Pour cette expression, j'ai aussi essayé de remplacer le .* comme tu me le disais, mais aucun résultats. Enfin bref...

Avec mon code ci-dessus, j'ai réussi à isoler ce qu'il y a entre les (( et les )).
Maintenant, est-il possible de savoir si par exemple cette chaine obtenue contient bien le format () AND ou OR () ??

Merci encore pour ton aide...


Orsam
 
WRInaute discret
Donc voilà,

pour çà :
Code:
((q%) AND (q%) OR (q%) AND (q%))

j'ai fait ceci :
Code:
(\({1}q%\)[\s]?AND[\s]?\(q%\)|\({1}q%\)[\s]?OR[\s]?\(q%\))

Donc ça marche bien, la seule chose, c'est que vu que je ne sais pas comment faire and OU or j'ai répété la séquence deux fois... :oops: ne m'engueulez pas, je ne sais pas faire autrement :lol: !!

Merci

Orsam
 
WRInaute discret
Bon après encore un peu de travail, ça donne ça :

Code:
(\(q%\)[\s]+?(?:AND|OR)[\s]+?\(q%\))


Orsam
 
Discussions similaires
Haut