Regex : reutilisation des substitution group dans l’expression régulière

Exemple de problématique: récupérer des tags html valides.
C’est à dire qui commence par un tag (<a>, <u>, <strong>) et qui fini par le bon tag (</a>, </u>, </strong>).

La première solution

La solution la plus évidente donne la regex suivante :

  1. <([a-z]+)[^>]*>(.*)<\/([a-z]+)>

Mais cela match des tags invalides:
<a>test</a> => test OK
<a>bla <b>test</b> bla</a> => bla <b>test KO
<a>test</b> => test KO

Deuxième solution: utiliser les substitution group dans la regex

On sait tous utiliser les substitutions group pour faire des remplacements de chaine.
Mais là où ça devient très interessant c’est qu’il est également possible de les utiliser dans la regex elle même !
Nous obtenons cette deuxième expression:

  1. <([a-z]+)[^>]*>(.*)<\/\1>

Remarque: la magie opère avec \1 qui match le texte de la 1ere accolade.

<a>test</a> => test OK
<a>bla <b>test</b> bla</a> => bla <b>test</b> bla OK
<a>test</b> => rien OK

Vous pouvez tester en live: http://www.regex101.com/r/zN4yS7

Le commentaires sont fermés.