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 :

Prendre en compte les retours à la ligne [Fait] [RegEx]


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut Prendre en compte les retours à la ligne
    bonjour,
    j'ai un texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $text = "<balise>voici <u>mon</u>
    joli texte</balise>
    je voudrais extraire
    voici <u>mon</u>
    joli texte
    je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("/&lt;balise[^&gt;]*&gt;(.*)&lt;\/balise[^&gt;]*&gt;/", htmlspecialchars($text), $matches);
    ce qui me récupère rien puisque mon retour à la ligne n'est pas pris en compte
    quand je n'ai pas de retour à la ligne, ça me donne bien ce que je veux.
    comment je peux faire pour lui faire prendre en compte ce retour à la ligne sachant qu'il peut y en avoir plusieurs et placés n'importe où entre les balises ?



  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Et avec le petit s ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/&lt;balise[^&gt;]*&gt;(.*)&lt;\/balise[^&gt;]*&gt;/s"
    Source : Les modificateurs

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Il me semble que le petit s est un caractère spécial à mettre dans l'expression, genre #[&gt;]*\s# et qu'il signifie tous les caracteres d'espacement (espace, tab, retour a la ligne)
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Non non le modificateur doit être mis à la fin c'est à dire après le / ou #. Tout comme le U et i. Ce qui peut être mis à l'intérieur c'est ^ et $ et les autres directement avec la notation \s .

    Mais dans notre cas, il vaut mieux le mettre à la fin vu que l'on ne sait pas où se trouve le retour à la ligne. Voir la source que j'ai donné avec

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Citation Envoyé par Kerod
    Ce qui peut être mis à l'intérieur c'est ^ et $ et les autres directement avec la notation \s
    C'est bien ce que je propose :

    #[&gt;]*\s#
    Je n'ai l'habitude de ne l'utiliser que comme ça ! mais en effet, si il a le meme effet en tant que modificateur, autant en profiter :p
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  6. #6
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    un problème disparait pour un autre je pensais pouvoir m'en sortir mais les regexp, c'est pas mon truc

    dans un autre fichier j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $text = "<balise>texte1
    suite</balise>
    <autreBalise>test</autreBalise><balise>texte2</balise>";
    je n'arrive pas à créer une regexp qui récupère les texte entre toutes les balises "balise". ma regexp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = "#&lt;paragraph[^&gt;]*&gt;(.*)&lt;/paragraph[^&gt;]*&gt;#s";
    me récupère tout entre les balises extrème, c'est à dire
    texte1
    suite</balise>
    <autreBalise>test</autreBalise><balise>texte2
    le souci est que j'ai un nombre indéterminé à l'avance de "balise". je peux le trouver avec substr_count mais ça ne m'avance pas tant que ça ne prendra pas le contenu d'une balise seule

    si vous avez une idée, je la prend parce que là je galère un peu

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il doit manquer le flag U ce coup-ci pour que les expressions telles que .+ et .* ne soient pas gourmandes (soit chercher la chaîne la plus courte au lieu de la plus longue).

    De plus, utiliser une classe de caractères (même négative) pour signifier l'absence d'une chaîne (au sens plus d'un caractère) est une erreur : il faut utiliser les assertions pour cela (le tutoriel de Yogui est très bien fait sur ce point).


    Julp.

  8. #8
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    oui effectivement, c'était le U
    problème résolu pour de bon, ça fait bien ce que je veux

    à vous tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] comment copier coller des cellules sans prendre en compte les lignes cachées
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/09/2014, 15h20
  2. Prendre en compte les sauts de ligne de la saisie
    Par madmax57 dans le forum Langage
    Réponses: 6
    Dernier message: 09/07/2008, 12h00
  3. Réponses: 2
    Dernier message: 28/08/2007, 15h40
  4. Réponses: 2
    Dernier message: 05/01/2007, 04h07
  5. [XSLT] prendre en compte les retours à la ligne
    Par mathieux dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/07/2006, 21h05

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