<ul><li class[^>]+><a href[^>]+>.*</a></li></ul>
ne peut pas matcher avec un bloc <ul>...</ul> parce qu'il y a des caractères entre <ul> et <li class: ces caractères font qu'à l'affichage, il y a passage à la ligne suivante après <ul> et décalage de <li class vers la droite.
De même il y a des caractères entre </li> et </ul>
Le passage à la ligne peut être dû à '\n' ou '\r' ou '\r\n' selon le système d'exploitation sur lequel on se trouve.
Il peut y avoir des blancs ou des tabulations entre <ul> et le signal de passage à la ligne. Ce n'est pas le cas de l'afichage que tu donnes: cela se voit en passant le curseur sur la ligne <ul> pour sélectionner: la mise en contre-couleur ne va pas au delà de <ul>.
À la ligne suivante, l'espace blanc devant '<li class' peut être dû à des blancs, ou des tabulations, ou les deux. On peut s'en sortir en utilisant '\s+' dans la RE. Mais il serait préférable de connaître quels sont les caractères présents à ces positions: plus une RE est écrite avec des caractèes précis, mieux c'est, pour son exactitude et sa rapidité d'exécution.
C'est pour cela que je te demandais de poster la valeur de la chaîne dont l'affichage donne ce que tu as présenté comme le menu renvoyé par une certaine fontion. Par valeur de chaîne, j'entends la sorte de succession de caractères suivante:
'<ul role="navigation">\n\t<li class="page_item page-item-2 current_page_item"><a href="http://localhost/excelsol/v1" title="ACCUEIL">ACCUEIL</a></li>\n\t<li class="page_item page-item-4"><a href="http://localhost/excelsol/v1/?page_id=4" title="REALISATION">REALISATION</a>\n\t\t<ul>\n\t\t\t<li class="page.....etc
qui , quand elle est interprétée pour affichage, donne
1 2 3 4 5
| <ul role="navigation">
<li class="page_item page-item-2 current_page_item"><a href="http://localhost/excelsol/v1" title="ACCUEIL">ACCUEIL</a></li>
<li class="page_item page-item-4"><a href="http://localhost/excelsol/v1/?page_id=4" title="REALISATION">REALISATION</a>
<ul>
<li class="page.....etc |
Ce serait mieux d'avoir cette valeur de chaîne, et non pas seulement son affichage.
Cependant on peut s'en sortir en pariant sur l'absence de bizarrerie dans la valeur de cette chaîne et en se fondant sur l'affichage du bloc <ul>....</ul> pour écrire la RE suivante:
'\s+<ul>\n(\s+<li class[^>]+><a href[^>]+>.*?</a></li>\n)+\s+</ul>'
S'il y a un problème, c'est peut être dû aux fins de ligne. Dans ce cas essaye de remplacer '\n' par '\r' ou '\r\n'. Ou encore '\r?\n'
Il est préférable d'écrire
<a href[^>]+>.*?</a>
au lieu de
<a href[^>]+>.*</a>
parce que dans le premier cas .* fait chercher le moteur de regex en allant le plus loin possible pour trouver un motif </a>.
Si l'option m n'a pas été spécifiée, le point ne matchera pas avec une fin de ligne, le moteur de regex va donc buter sur l'extrémité de la ligne et il va devoir revenir en arrière pour trouver le dernier </a> dépassé. Cela lui fait perdre du temps inutilement.
Si l'option m est spécifiée, le moteur de regex ira matcher avec le dernier </a> de la chaîne totale, c'est à dire qu'il dépassera même </ul>
Je voudrais avoir réponse aux questions suivantes:
- faut il éliminer
<a href="http://localhost/excelsol/v1" title="ACCUEIL">ACCUEIL</a>
qui se trouve dans la ligne
<li class="page_item page-item-2 current_page_item"><a href= etc.... ?
- faut il éliminer
<a href="http://localhost/excelsol/v1/?page_id=4" title="REALISATION">REALISATION</a>
dans la ligne
<li class="page_item page-item-4"><a href= etc.... ?
- faut il éliminer
<a href="http://localhost/excelsol/v1/?page_id=5" title="TECHNIQUES">TECHNIQUES</a>
dans la ligne
<li class="page_item page-item-5"><a href= etc... ?
- faut il éliminer
<a href="http://localhost/excelsol/v1/?page_id=17" title="NEWS">NEWS</a>
dans la ligne
<li class="page_item page-item-17"><a href= etc.... ?
- Les lignes ci-dessus sont elles ce que tu as appelé les « rubriques de premier niveau » ?
Le problème étant que parmi les 4 lignes ci-dessus, seules la 2 et la 3 sont suivies d'un bloc <ul>.....</ul>
Partager