Astuces webdesignAstuces et tutoriaux

Expressions régulières cours n°9

Publier le Jeudi, juillet 16, 2009

<!– @page { margin: 2cm } –>

Choix optionnels

Le point d’interrogation rend optionnel l’élément précédent dans l’expression régulière. Par ex. : colou?r matche à la fois colour et color.

Vous pouvez rendre plusieurs éléments optionnels en les regroupant dans des parenthèses, et en plaçant le point d’interrogation après la parenthèse fermée. Par ex. : Nov(ember)? Matchera Nov et November.

Vous pouvez écrire une expression régulière qui matche toute alternative en incluant plus d’un point d’interrogation. Feb(ruary)? 23(rd)? Matche February 23rd, February 23, Feb 23rd et Feb 23.

Un concept de regex important : l’avidité

Le point d’interrogation est le premier métacaractère avide que j’ai introduit. Le point d’interrogation donne deux choix au regex : essayer de matcher la partie à laquelle le point d’interrogation s’applique, ou ne pas essayer de la matcher.Le moteur tentera toujours de matcher cette partie. C’est seulement si l’expression régulière échoue, que le moteur tentera d’ignorer la partie où le point d’interrogation s’applique.

Ce qui fait que si vous appliquez le regex 23(rd)? À la chaîne “Aujourd’hui c’est le 23rd février 2003″, le matche sera toujours le 23rd et non 23.Vous pouvez rendre le point d’interrogation paresseux (c-à-d enlever le mode avide) en ajoutant un second point d’interrogation après le premier.

J’en dirai plus sur l’avidité lorsque je discuterai les autres opérateurs de répétition.

Un regard sur le moteur de regex

Appliquons l’expression régulière colou?r à la chaîne The colonel likes the colour green.

Le premier élément est le littéral c. La première position où il matche est le c de colonel. Le regex continue, et trouve que le o matche le o, le l matche l et le o matche o. Ensuite le moteur de regex vérifie si u matche n. Sans succès. Cependant le point d’interrogation indique au moteur de regex qu’il est acceptable de ne pas matcher u. Donc,le moteur va continuer vers le prochain élément du regex : r.Mais il échour également à matcher n. Alors le moteur de regex peut seulement conclure que l’expression régulière en entier ne peut pas être matchée en partant du c de colonel. Ensuite, le moteur continue en essayant de matcher c avec le premier o de colonel.

Après une série d’échecs, c va matcher c dans color, et o, l et o vont matcher les caractères suivants. Ensuite le moteur de regex vérifie si u matche r. Sans succès. Encore une fois, ce n’est pas un problème.Le point d’interrogation permet au moteur de continuer avec r. Cela matche r et le moteur rapporte que le regex a matché color dans la chaîne.

VN:R_U [1.4.2_694]
Rating: 0.0/5 (0 votes cast)
  • Share/Save/Bookmark
Donner votre réponse
Vous devez être enregistré pour poster un commentaire.