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 :

Diviser en trois parties un texte


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut Diviser en trois parties un texte
    Bonjour

    J'ai besoin de vos connaissances en regex pour récupérer et diviser un texte. A vous de voir s'il est nécessaire de faire une regex.
    Une variable contient un texte, qui est sous cette forme:

    13000-TitreTitreTitre

    BlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlabla
    BlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlabla
    BlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlablaBlabla

    La première ligne contient un tiret, qui sépare un numéro et le titre du texte.
    Le numéro peut avoir entre 1 et 6 chiffres.
    Après le tiret, on a le titre du texte. (Attention, le titre peut contenir aussi un tiret).
    Ensuite, on a un saut de ligne.
    Ensuite, on a tout le texte lui-même.

    Je voudrais avoir dans une 1ere variable le numéro, puis dans une autre variable je voudrais avoir le titre. Enfin, je voudrais avoir dans une troisième variable le reste du texte (sans le saut de ligne).

    Je vous remercie

    (Je ne sais pas si c'est le meilleur endroit pour poster cette question, car cela peut ne pas faire intervenir les regex. A vous de voir).

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    <?php
    $texte = '13000-Nomina primigenia - viribus
        
    Ignominiam insignem insignem exitum exemplo ac.
    Gabini atque praesertim modo senatus praesertim dum,
    hac esse nec uni nec ignominia fuerit.';
     
    $pattern = '/^([0-9]*)-([^\n\r\t]*)[\n\r\t ]*(.*)$/is';
     
    $find = preg_match($pattern, $texte, $matches);
    if($find){
    	echo '1 - '.$matches[1].'<br />';
    	echo '2 - '.$matches[2].'<br />';
    	echo '3 - '.nl2br($matches[3]).'<br />';
    } else {
    	echo 'Oups !';
    }
    ?>
    1 - 13000
    2 - Nomina primigenia - viribus
    3 - Ignominiam insignem insignem exitum exemplo ac.
    Gabini atque praesertim modo senatus praesertim dum,
    hac esse nec uni nec ignominia fuerit.
    Dernière modification par Invité ; 16/08/2013 à 18h52.

  3. #3
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Vous pouvez le faire ça comme le premier essai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //$txt : le texte lit
    $pattern='/^\s*([0-9]{1,6})-(.*?)(\r\n){2}([\s\S]*)$/';
    if (preg_match($pattern, $txt, $matches)) {
        $idx=$matches[1];
        $title=$matches[2];
        $content=$matches[4];
     
        echo 'index: ',$idx,"\n";
        echo 'titre: ',$title,"\n";
        echo "contents:\n",$content,"\n";
     
    } else {
        echo 'aucun match n\'est trouvé', "\n";
    }
    Edit
    [1] Je n'ai pas vu la response de jreaux62 durant le temps que je rédige et poste ma response... désolé!
    [2] Aussi après considération, je dois simplier l'essai de tenir compte crlf pour les differentes os: il est faille, je pense; donc, je remets le plus simple rendrement qui est suffisant pour la plupart des cas.

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Bonjour
    Merci pour les réponses. Je vais tester ca et vous revenir.

  5. #5
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je peux reprendre l'issue de crlf plus tranquil à ce moment.

    Pour faire le pattern valuable pour plus de portée et en même temps ne pas perturber les indices j'ai utilisés, on peut replacer la particule spécifique de cette manière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //$pattern='/^\s*([0-9]{1,6})-(.*?)(\r\n){2}([\s\S]*)$/';
    $pattern='/^\s*([0-9]{1,6})-(.*?)(\r\n\r\n|\n\n|\r\r)([\s\S]*)$/';
    On peut utilser réference (\\x avec x un digit correspondant) pour qu'il parâit encore plus de logique, mais il va perturber les indices.

Discussions similaires

  1. comment diviser une page jsf en trois partie
    Par info_plus dans le forum JSF
    Réponses: 9
    Dernier message: 02/04/2008, 16h25
  2. [JTextField] Supprimer une partie du texte
    Par jean_bobi dans le forum Composants
    Réponses: 4
    Dernier message: 26/09/2005, 16h22
  3. [VBA][Excel]Supprimer une partie du texte d'une grosse liste
    Par annedeblois dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2005, 18h15
  4. Selectionner par javascript une partie de texte
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/06/2005, 17h53
  5. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 15h38

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