Bonsoir
Je fais appel à vous pour un problème de pattern que je n'arrive pas à régler.
Tout d'abord, pour mettre dans le contexte, le but est de récupérer les attributs possibles, ainsi que les valeurs possibles dans le cas ou elles sont énumérées (comme le target="_blank|_parent|_self|_top" par exemple). Tout ça pour permettre à une classe, qui propose l'insertion d'html à la volée dans un masque, de vérifier que la balise existe, les attributs aussi ainsi que leur valeur dans le cas d'un énum, le principe étant de pouvoir utiliser cette classe en encadrant un minimum une syntaxe au norme W3C. donc mon script récupère la page dédiée de chaque balise depuis le site W3C, et j'essaie avec une regex de récupérer la partie attributs.
Voilà l'expression que j'ai actuellement :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $pattern = '/ <tr> \s* <td><a\s{1,1}href=".+">([a-z]+)<\/a>(?:\s{1,1}<span\s*class="new">New<\/span>){0,1} <\/td> \s* <td> (?: (<i>(.+)<\/i>)? | (.+(?:<br>)?)* ) <\/td> \s* <td>(.+)<\/td> \s* <\/tr> /x';
Le problème est au niveau de la cellule dont j'ai mis le code en couleur rouge. Il me sort les attributs qui n'ont pas d'enum uniquement (donc le premier cas entouré par <i>).
2 Exemples différents de cette cellule, le premier qu'il est capable de récupérer :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <td><i>media_query</i></td>
Et le second, qu'il omet et qui me pose problème :
Je précise que du coup dans ce cas précis, la regex est fausse et donc il ne me fais pas ressortir l'attribut. Même problème, si je remplace par (.+). Ca sort si je met le drapeau s mais du coup ça je récupère quasiment toute la page avec.
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <td>alternate<br> author<br> bookmark<br> help<br> license<br> next<br> nofollow<br> noreferrer<br> prefetch<br> prev<br> search<br> tag</td>
Qu'en pensez-vous ? J'aimerais avoir au moins la liste de tous les attributs possibles, les valeurs c'est un peut être poussé je suis prêt à m'en passer pour le moment.
Partager