IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Recherche du bon pattern pour une expression régulière


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut Recherche du bon pattern pour une expression régulière
    Bonjour à tous,

    Je suis à la recherche du bon pattern pour expression régulière.
    Voilà ce que j'ai fait pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $reg = '#(<li class[^>]+>)(<a href[^>]+>)(.*)(</a>)(</li>)#iD';
    $rep = $before.'$1$2$3$4$5'.$after;
    $str = preg_replace($reg, $rep, $str);
    qui fonctionne très bien et qui me permet d'ajouter un élément soit avant, soit après mon élément li.

    Mon problème est que cette liste me sert à générer dynamiquement un menu et lorsqu'il y a des éléments de sous menu on intègre (Wordpress) une balise ul à l'intérieur de la balise li de l'élément parent de menu.

    Du coup il faudrait quelque choses comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $reg = '#(<li class[^>]+>)(<a href[^>]+>)(.*)(</a>)(<ul><li class[^>]+><a href[^>]+>.*</a></li></ul>)(</li>)#iD';
    mais ça ne fonctionne pas.

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    lorsqu'il y a des éléments de sous menu
    C'est à dire ? Un ou des exemples serai(en)t fort bien venus pour mieux comprendre.

    on intègre (Wordpress) une balise ul à l'intérieur de la balise li de l'élément parent de menu
    C'est à dire ?



    Qu'est ce que tu recherches finalement ? Obtenir quelque chose ou empêcher quelque chose ?
    Quoi ?

    Désolé je ne comprends pas.

  3. #3
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Bonjour, alors pour être plus clair j'utilise wordpress sur un projet et la fonction renvoyant le menu me donne ça :

    Code : 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
    20
    21
    22
     
    <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_item page-item-21"><a href="http://localhost/excelsol/v1/?page_id=21" title="sol béton ciré">sol béton ciré</a></li>
    			<li class="page_item page-item-23"><a href="http://localhost/excelsol/v1/?page_id=23" title="murs">murs</a></li>
    			<li class="page_item page-item-25"><a href="http://localhost/excelsol/v1/?page_id=25" title="béton poli">béton poli</a></li>
    			<li class="page_item page-item-28"><a href="http://localhost/excelsol/v1/?page_id=28" title="salle de bains">salle de bains</a></li>
    			<li class="page_item page-item-30"><a href="http://localhost/excelsol/v1/?page_id=30" title="escalier">escalier</a></li>
    			<li class="page_item page-item-32"><a href="http://localhost/excelsol/v1/?page_id=32" title="commerce">commerce</a></li>
    		</ul>
    	</li>
    	<li class="page_item page-item-5"><a href="http://localhost/excelsol/v1/?page_id=5" title="TECHNIQUES">TECHNIQUES</a>
    		<ul>
    			<li class="page_item page-item-9"><a href="http://localhost/excelsol/v1/?page_id=9" title="Béton ciré">Béton ciré</a></li>
    			<li class="page_item page-item-13"><a href="http://localhost/excelsol/v1/?page_id=13" title="Process vitrobeton">Process vitrobeton</a></li>
    			<li class="page_item page-item-11"><a href="http://localhost/excelsol/v1/?page_id=11" title="Sols industriels">Sols industriels</a></li>
    		</ul>
    	</li>
    	<li class="page_item page-item-17"><a href="http://localhost/excelsol/v1/?page_id=17" title="NEWS">NEWS</a></li>
    </ul>
    Mon objectif est de pouvoir ajouter à chaque fin de ligne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li class="seprator"></li>
    Et pour bien faire il faudrait que je puisse aussi supprimer les textes des balises <a...> mais uniquement pour les rubriques de premier niveau (elles sont remplacés par des images dans la css)

    J'espère m'être mieux exprimer

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Mon objectif est de pouvoir ajouter à chaque fin de ligne ça :
    <li class="seprator"></li>

    Pour obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ul role="navigation"><li class="seprator"></li>
        ....."ACCUEIL">ACCUEIL</a></li><li class="seprator"></li>
        .....N">REALISATION</a><li class="seprator"></li>
            .....<ul><li class="seprator"></li>
                 .....éton ciré</a></li><li class="seprator"></li>
                 .....urs</a></li><li class="seprator"></li>
                 etc
                 .....merce</a></li><li class="seprator"></li>
            .....</ul><li class="seprator"></li>
        </li><li class="seprator"></li>
         .....>TECHNIQUES</a><li class="seprator"></li>
            .....<ul><li class="seprator"></li>
    etc etc
    c'est à dire vraiment à chaque fin de ligne ?



    Ou bien désignes-tu par fin de ligne: '\n' ?

  5. #5
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    En faite il faut que j'ajoute cette balise <li class="separator"></li> après chaque balise <li> fermante (</li>).

    Voilà une fonction qui marche mais uniquement pour les catégories qui n'ont pas de sous catégories, matérialisées par le fait que la balise <li> inclue un groupe <ul>...</ul> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function deleteTextMenu ($before = null, $str, $after = null) {
    	$reg = '#(<li class[^>]+>)(<a href[^>]+>)(.*)(</a>)(</li>)#iD';
    	$rep = $before.'$1$2$3$4$5'.$after;
    	$str = preg_replace($reg, $rep, $str);
    	return $str;
    }

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Je ne comprends pas tout bien.
    Alors je retiens ceci:

    - il faudrait que je puisse aussi supprimer les textes des balises <a...> mais uniquement pour les rubriques de premier niveau

    - il faut que j'ajoute cette balise <li class="separator"></li> après chaque balise <li> fermante (</li>).
    Je suppose que les rubriques de premier niveau sont celles dont les '<li class' sont les plus à gauche.
    Plutôt que de les caractériser comme étant « les catégories qui n'ont pas de sous catégories, matérialisées par le fait que la balise <li> inclue un groupe <ul>...</ul> » ,
    je pense qu'il est plus pratique de rester sur cette idée de 'plus à gauche':
    ces catégories sont celles qui n'ont qu'une unité de tabulation en tête de ligne.

    Quand je parle d'une unité de tabulation il s'agit d'un espace spécifié par '\t' dans la chaîne qui est affichée.

    Pour visualiser s'il s'agit d'une unité de tabulation ou de plusieurs espaces, il suffit de placer le curseur en tète de ligne et d'appuyer une fois sur la flèche -> du clavier;
    mais il est préférable d'utiliser une fonction qui affiche les caractères présents dans une chaîne sans les interpréter comme instruction d'affichage. En Python il s'agit de repr() et son usage sur ta chaîne donne:



    '<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_item page-item-21"><a href="http://localhost/excelsol/v1/?page_id=21" title="sol b\xe9ton cir\xe9">sol b\xe9ton cir\xe9</a></li>\n\t\t\t<li class="page_item page-item-23"><a href="http://localhost/excelsol/v1/?page_id=23" title="murs">murs</a></li>\n\t\t\t<li class="page_item page-item-25"><a href="http://localhost/excelsol/v1/?page_id=25" title="b\xe9ton poli">b\xe9ton poli</a></li>\n\t\t\t<li class="page_item page-item-28"><a href="http://localhost/excelsol/v1/?page_id=28" title="salle de bains">salle de bains</a></li>\n\t\t\t<li class="page_item page-item-30"><a href="http://localhost/excelsol/v1/?page_id=30" title="escalier">escalier</a></li>\n\t\t\t<li class="page_item page-item-32"><a href="http://localhost/excelsol/v1/?page_id=32" title="commerce">commerce</a></li>\n\t\t</ul>\n\t</li>\n\t<li class="page_item page-item-5"><a href="http://localhost/excelsol/v1/?page_id=5" title="TECHNIQUES">TECHNIQUES</a>\n\t\t<ul>\n\t\t\t<li class="page_item page-item-9"><a href="http://localhost/excelsol/v1/?page_id=9" title="B\xe9ton cir\xe9">B\xe9ton cir\xe9</a></li>\n\t\t\t<li class="page_item page-item-13"><a href="http://localhost/excelsol/v1/?page_id=13" title="Process vitrobeton">Process vitrobeton</a></li>\n\t\t\t<li class="page_item page-item-11"><a href="http://localhost/excelsol/v1/?page_id=11" title="Sols industriels">Sols industriels</a></li>\n\t\t</ul>\n\t</li>\n\t<li class="page_item page-item-17"><a href="http://localhost/excelsol/v1/?page_id=17" title="NEWS">NEWS</a></li>\n</ul>\n'

    Je ne comprends pas quel rôle jouent l'existence de 5 groupes capturant dans ta RE.
    J'ai donc fait à ma manière, i.e. en Python , car je ne sais pas écrire de code bien poussé en PHP.

    J'espère que mon code puisse t'inspirer et être facilement transcrit en PHP. Cela consistera à utiliser une fonction preg_replace_callback() avec une fonction auxiliaire; je ne vois pas comment faire autrement.

    L'option re.M est l'analogue de l'option m de PHP.

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    def yoop(m):
        if   m.group(4):  return m.group(4)+'<li class="separator"></li>'
        elif m.group(3):  return m.group(1)+'</li><li class="separator"></li>'
        else           :  return m.group(1)
     
    import re
    pat = re.compile('(?:(^\t<li class="page_item page-item-.+?>)'\
                     '(<a href="http://localhost/excelsol/v1.+?</a>)?.*?(</li>)?)'\
                     '|(^.*?</li>)',re.M)
     
    ch = '''<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_item page-item-21"><a href="http://localhost/excelsol/v1/?page_id=21" title="sol béton ciré">sol béton ciré</a></li>
    			<li class="page_item page-item-23"><a href="http://localhost/excelsol/v1/?page_id=23" title="murs">murs</a></li>
    			<li class="page_item page-item-25"><a href="http://localhost/excelsol/v1/?page_id=25" title="béton poli">béton poli</a></li>
    			<li class="page_item page-item-28"><a href="http://localhost/excelsol/v1/?page_id=28" title="salle de bains">salle de bains</a></li>
    			<li class="page_item page-item-30"><a href="http://localhost/excelsol/v1/?page_id=30" title="escalier">escalier</a></li>
    			<li class="page_item page-item-32"><a href="http://localhost/excelsol/v1/?page_id=32" title="commerce">commerce</a></li>
    		</ul>
    	</li>
    	<li class="page_item page-item-5"><a href="http://localhost/excelsol/v1/?page_id=5" title="TECHNIQUES">TECHNIQUES</a>
    		<ul>
    			<li class="page_item page-item-9"><a href="http://localhost/excelsol/v1/?page_id=9" title="Béton ciré">Béton ciré</a></li>
    			<li class="page_item page-item-13"><a href="http://localhost/excelsol/v1/?page_id=13" title="Process vitrobeton">Process vitrobeton</a></li>
    			<li class="page_item page-item-11"><a href="http://localhost/excelsol/v1/?page_id=11" title="Sols industriels">Sols industriels</a></li>
    		</ul>
    	</li>
    	<li class="page_item page-item-17"><a href="http://localhost/excelsol/v1/?page_id=17" title="NEWS">NEWS</a></li>
    </ul>'''
    print pat.sub(yoop,ch)

    Résultat:

    Code : 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
    20
    21
    <ul role="navigation">
    	<li class="page_item page-item-2 current_page_item"></li><li class="separator"></li>
    	<li class="page_item page-item-4">
    		<ul>
    			<li class="page_item page-item-21"><a href="http://localhost/excelsol/v1/?page_id=21" title="sol béton ciré">sol béton ciré</a></li><li class="separator"></li>
    			<li class="page_item page-item-23"><a href="http://localhost/excelsol/v1/?page_id=23" title="murs">murs</a></li><li class="separator"></li>
    			<li class="page_item page-item-25"><a href="http://localhost/excelsol/v1/?page_id=25" title="béton poli">béton poli</a></li><li class="separator"></li>
    			<li class="page_item page-item-28"><a href="http://localhost/excelsol/v1/?page_id=28" title="salle de bains">salle de bains</a></li><li class="separator"></li>
    			<li class="page_item page-item-30"><a href="http://localhost/excelsol/v1/?page_id=30" title="escalier">escalier</a></li><li class="separator"></li>
    			<li class="page_item page-item-32"><a href="http://localhost/excelsol/v1/?page_id=32" title="commerce">commerce</a></li><li class="separator"></li>
    		</ul>
    	</li><li class="separator"></li>
    	<li class="page_item page-item-5">
    		<ul>
    			<li class="page_item page-item-9"><a href="http://localhost/excelsol/v1/?page_id=9" title="Béton ciré">Béton ciré</a></li><li class="separator"></li>
    			<li class="page_item page-item-13"><a href="http://localhost/excelsol/v1/?page_id=13" title="Process vitrobeton">Process vitrobeton</a></li><li class="separator"></li>
    			<li class="page_item page-item-11"><a href="http://localhost/excelsol/v1/?page_id=11" title="Sols industriels">Sols industriels</a></li><li class="separator"></li>
    		</ul>
    	</li><li class="separator"></li>
    	<li class="page_item page-item-17"></li><li class="separator"></li>
    </ul>

  7. #7
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Bonjour, merci pour cette solution mais je ne peux absolument pas jouer sur les tabulations. C'est moi qui les ai mise pour que le code html soit plus lisible dans le forum. Lorsque wordpress le génère il ne le fait pas ...

    Il faut donc se baser sur les listes ul contenues dans les li.

    Je pense que si tu me dis quelle pattern correspond à ce bloc ça m'aiderait beaucoup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <ul>
    			<li class="page_item page-item-21"><a href="http://localhost/excelsol/v1/?page_id=21" title="sol béton ciré">sol béton ciré</a></li><li class="separator"></li>
    			<li class="page_item page-item-23"><a href="http://localhost/excelsol/v1/?page_id=23" title="murs">murs</a></li><li class="separator"></li>
    			<li class="page_item page-item-25"><a href="http://localhost/excelsol/v1/?page_id=25" title="béton poli">béton poli</a></li><li class="separator"></li>
    			<li class="page_item page-item-28"><a href="http://localhost/excelsol/v1/?page_id=28" title="salle de bains">salle de bains</a></li><li class="separator"></li>
    			<li class="page_item page-item-30"><a href="http://localhost/excelsol/v1/?page_id=30" title="escalier">escalier</a></li><li class="separator"></li>
    			<li class="page_item page-item-32"><a href="http://localhost/excelsol/v1/?page_id=32" title="commerce">commerce</a></li><li class="separator"></li>
    		</ul>
    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ul><li class[^>]+><a href[^>]+>.*</a></li></ul>
    mais ça ne marche pas.

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Bonjour,



    Évidemment, si tu ne fournis pas les données correctes .......




    Je voudrais voir la valeur de la chaîne "menu" renvoyée par une fonction dont tu as parlées dans le message #3, et non pas son affichage tel qu'il se trouve dans ce message #3.

    C'est à dire que je voudrais voir la succession de caractères
    ( analogue à celle-ci mais qui n'est pas celle-ci d'après ce que tu as dit:
    '<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
    )
    dont l'affichage donne ce que tu as présenté dans le message 3.

    L'affichage d'une chaîne est en effet assuré par un moteur de rendu qui interprète certains caractères d'une chaîne comme instructions d'affichage: '\n' provoque un retour à la ligne, etc.
    Je ne veux pas l'affichage, mais voir les caractères bruts.
    En Python pour obtenir les caractères bruts d'une chaine ch , on fait print repr(ch). En PHP, je ne sais pas, à toi de trouver.




    Je regarde ta demande de pattern

  9. #9
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Merci

  10. #10
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    <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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '\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>

Discussions similaires

  1. définition de pattern pour les expressions régulières
    Par hadler dans le forum Général Java
    Réponses: 2
    Dernier message: 04/12/2009, 14h23
  2. Besoin d'aide pour une expression régulière
    Par chlon dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/07/2009, 16h41
  3. [RegEx] Besoin d'aide pour une expression régulière
    Par vallica dans le forum Langage
    Réponses: 4
    Dernier message: 04/09/2007, 19h59
  4. [RegEx] Aide pour une expression réguliére.
    Par mr_keyser dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2007, 10h27
  5. Besoin d'aide pour une expression régulière
    Par planetiss dans le forum Langage
    Réponses: 5
    Dernier message: 16/02/2006, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo