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 :

Expression régulière pour code HTML et saut de ligne


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Expression régulière pour code HTML et saut de ligne
    Bonjour,

    Je veux mettre en place une expression régulière me permettant de sélectionner une partie d'un code html entre deux balises bien spécifiques, j'y arrive pas à cause de saut de lignes,

    ces deux balises sont :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a name="RcpIndicTherap">4.1. Indications thérapeutiques</a>
    (récupérer tous ce code)
    <a name="RcpPosoAdmin">4.2. Posologie et mode d'administration</a>

    le nombre de saut de lignes et la quantité du code entre ces deux balises peut varier d'une page à une autre,

    il me faut donc une expression qui peut choisir tout le code quelque soit le nombre de sauts, d'espaces ou de code html.

    voici le contenu de mon code file/file/php :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <p class="AmmAnnexeTitre2"><a name="RcpIndicTherap">4.1. Indications thérapeutiques</a></p>
    <p class=AmmCorpsTexte><u>Hypertension</u></p>
    <p class=AmmCorpsTexte>Traitement de l’hypertension artérielle essentielle chez l’adulte.</p>
    <p class=AmmCorpsTexte><u>Prévention cardiovasculaire</u></p>
    <p class=AmmCorpsTexte>Réduction de la morbidité cardiovasculaire chez les adultes présentant :</p>
    <p class=AmmListePuces1><span style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>         </span></span>une maladie cardiovasculaire athérothrombotique connue (antécédents de coronaropathie, d’accident vasculaire cérébral, ou d’artériopathie périphérique) ou</p>
    <p class=AmmListePuces1><span style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>         </span></span>un diabète de type 2 avec une atteinte d’organe cible documentée.</p>
    <p class="AmmAnnexeTitre2"><a name="RcpPosoAdmin">4.2. Posologie et mode d'administration</a></p>

    Voici mon expression régulière, elle ne me permet qu'avoir le premier </p> et s'arrête au premier saut de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $csv = file_get_contents("file/file.html");
    preg_match('/<a name="RcpIndicTherap">4.1. Indications thérapeutiques<\/a>(.*)/i',$csv, $matches);
    print_r($matches);

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Hello,

    pourquoi ne pas utiliser la classe DOMDocument qui est prévu pour manipuler du XML (donc du HTML) et qui semble plus approprié pour résoudre ton besoin ?

  3. #3
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    http://www.phpliveregex.com/p/47L


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("/<a name="RcpIndicTherap">4.1. Indications thérapeutiques<\/a>(.*)<a name="RcpPosoAdmin">/s", $input_lines, $output_array);
    ramène :

    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
    Array
    (
        [0] => Array
            (
                [0] => <a name="RcpIndicTherap">4.1. Indications thérapeutiques</a>
    (récupérer tous ce code)
    <a name="RcpPosoAdmin">
            )
     
        [1] => Array
            (
                [0] => 
    (récupérer tous ce code)
     
            )
     
    )
    option => /s (pour que le . puisse être un saut de ligne)
    Spartacusply => car c'est beaucoup plus facile avec un REGEX ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Anti-hero de Films Comiques
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Anti-hero de Films Comiques

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Il manque quelque chose dans l'expression d'Aurelien: le .* est gourmand et consomme toute la chaine jusqu'a la derniere instance de la chaine terminale (posologie). Pas un probleme s'il n'y a qu'un bloc de code dans la chaine, mais problematique s'il y en a plusieurs. Donc transformer le .* en .*?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $code = '<a name="RcpIndicTherap">4.1. Indications thérapeutiques</a>
    (récupérer tous ce code)
    <a name="RcpPosoAdmin">4.2. Posologie et mode d\'administration</a>';
    $code=$code.$code; // Test sur deux de suite
     
    if(preg_match_all("~(?s)<a name=\"RcpIndicTherap\">4.1. Indications thérapeutiques</a>\R*(.*?)\R*<a name=\"RcpPosoAdmin\">4.2. Posologie et mode d'administration</a>~",$code,$m))
    print_r($m[1]); // array avec "recuperer..." deux fois

Discussions similaires

  1. Expression régulière pour code moche
    Par jacklafrip dans le forum C#
    Réponses: 11
    Dernier message: 24/08/2012, 15h04
  2. Expression régulière pour nettoyer HTML
    Par jeyce dans le forum Langage
    Réponses: 0
    Dernier message: 17/02/2010, 00h47
  3. Expression régulière sur code HTML
    Par goliath dans le forum Général Python
    Réponses: 4
    Dernier message: 03/09/2009, 19h02
  4. Expressions régulières pour filtrer du code HTML
    Par Junta dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 14/11/2006, 18h00
  5. [Regexp]Expressions régulières et code HTML
    Par Rayool dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 22/09/2006, 11h01

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