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 :

Remplacer les LF sans remplacer les CRLF


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2016
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Remplacer les LF sans remplacer les CRLF
    Bonjour,
    Sauriez vous comment, dans un fichier, remplacer les fin de ligne (LF) par un | sans remplacer les retours chariot suivit des fin de ligne (CRLF), en PHP 5.6.
    Merci de votre aide

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    strtr() me semble être l'arme idéale pour faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str = "lapin\ntortue\r\ncarotte\nsalade\r\nchat\nchien\r\nsouris\nhérisson";
     
    $result = strtr($str, ["\r\n" => "\r\n", "\n" => '|']);
    La ruse étant de remplacer les CRLF par eux-mêmes car strtr() ne parcourt qu'une fois la chaîne et donne la priorité à la plus grande correspondance.


    Sinon dans une regex, il suffit d'utiliser un test arrière négatif (?<!...) pour vérifier qu'il n'y a pas de CR avant le LF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = preg_replace('~(?<!\r)\n~', '|', $str);
    Mais à mon avis strtr() sera plus rapide.



    Autre méthode plus traditionnelle avec des remplacements successifs: on remplace la partie à protéger par un placeholder avant de remplacer les LFs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = str_replace(['#', "\r\n", "\n", '#!#!', '##'], ['##', '#!#!', '|', "\r\n", '#'], $str);
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Remplacer les CR d'un fichier sans toucher aux crLF de fin de ligne
    Par soazig dans le forum Shell et commandes GNU
    Réponses: 22
    Dernier message: 18/09/2014, 15h29
  2. [CR 2008] remplacer les 'crlf' par des espaces dans un texte de "type" RTF
    Par digitfree dans le forum Formules
    Réponses: 5
    Dernier message: 02/04/2013, 11h18
  3. enlever les CRLF
    Par Smix007 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/11/2011, 18h56
  4. [RegEx] Remplacer une chaine par un lien sans exploser les balises
    Par yahoowaloo dans le forum Langage
    Réponses: 5
    Dernier message: 19/07/2011, 11h39

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