Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2890 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  preg_replace [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

preg_replace [résolu]

n°2038721
Riot
Buy me a riot
Posté le 26-11-2010 à 17:35:52  profilanswer
 

Bonjour,
 
Je souhaiterais modifier une chaîne de caractère particulière dans un texte.
Voici un exemple du texte :
 

Code :
  1. #EXTINF:0,foo
  2. http://foobar
  3. #EXTINF:0,bar
  4. http://barfoo


 
Je voudrais modifier la ligne http://foobar qui suit foo par huhu.  
 
Pour ça j'ai utilisé le code suivant, mais ça ne marche pas.

Code :
  1. $name = "foo";
  2. $pattern = "/foo/\n.*/\n/m";
  3. $replacement = "foo/\nhuhu/\n";
  4. $result = preg_replace( $pattern, $replacement, $content );


 
Une idée ?


Message édité par Riot le 01-12-2010 à 15:15:20

---------------
Be the one with the flames.
mood
Publicité
Posté le 26-11-2010 à 17:35:52  profilanswer
 

n°2038847
stealth35
Posté le 28-11-2010 à 00:12:29  profilanswer
 

pourquoi \n ?
sinon ca serai :

Code :
  1. preg_replace('/(http:\/\/foo)(\S+)/', '$1huhu', $str);


 
mais c'est pas très claire comme demande

n°2038873
flo850
moi je
Posté le 28-11-2010 à 14:15:14  profilanswer
 

str_replace ne serait il pas plus pratique ?

n°2038914
Riot
Buy me a riot
Posté le 28-11-2010 à 22:46:48  profilanswer
 

stealth35 a écrit :

pourquoi \n ?
sinon ca serai :

Code :
  1. preg_replace('/(http:\/\/foo)(\S+)/', '$1huhu', $str);


 
mais c'est pas très claire comme demande


Parce que http://foobar correspond à la ligne du dessus, c'est-à-dire #EXTINF:0,foo
Du coup, je cherche à trouver "foo\n" + la ligne du dessous, pour pouvoir faire le remplacement.
 

flo850 a écrit :

str_replace ne serait il pas plus pratique ?


Oui mais c'est pour faire un truc classe et propre :o :D


---------------
Be the one with the flames.
n°2038971
stealth35
Posté le 29-11-2010 à 10:00:05  profilanswer
 

y'avait pas toute l'explication (mais je suis sur il manque encore des choses)

 

ducoup ca donne ca

 
Code :
  1. $str = <<<HEREDOC
  2. #EXTINF:0,foo
  3. http://foobar
  4. #EXTINF:0,bar
  5. http://barfoo
  6. HEREDOC;
  7.  
  8. echo preg_replace('/(#\w+:\d+,((?m)\S+)\s+http:\/\/\2)(\S+)/', '$1huhu', $str);
  9.  
  10. /*
  11. #EXTINF:0,foo
  12. #EXTINF:0,bar
  13. */


Message édité par stealth35 le 29-11-2010 à 10:05:31
n°2038973
Dj YeLL
$question = $to_be || !$to_be;
Posté le 29-11-2010 à 10:11:40  profilanswer
 

Code :
  1. $pattern = '`(#EXTINF:0,foo\n).*`';
  2. echo preg_replace($pattern, '\1huhu', $str);

Message cité 1 fois
Message édité par Dj YeLL le 29-11-2010 à 10:13:14

---------------
Gamertag: CoteBlack YeLL
n°2038976
stealth35
Posté le 29-11-2010 à 10:27:25  profilanswer
 

Dj YeLL a écrit :

Code :
  1. $pattern = '`(#EXTINF:0,foo\n).*`';
  2. echo preg_replace($pattern, '\1huhu', $str);



 
ça modifie rien ca  :sarcastic:

n°2038987
Riot
Buy me a riot
Posté le 29-11-2010 à 10:58:25  profilanswer
 

Hello,
 
Merci pour votre aide.
Pour info, l'extrait de fichier que j'ai donné est le contenu d'une playlist .m3u.
Dans "#EXTINF:0,foo", foo désigne le nom du média ; et la ligne suivante désigne l'URI de ce média.
Ce que j'ai besoin de faire est de remplacer l'URI d'un média défini par une autre URI.
 
Dans l'exemple que j'ai donné en 1er post, je voudrais remplacer http://foobar qui suit foo par huhu. Donc au final je veux ça :

Code :
  1. #EXTINF:0,foo
  2. huhu
  3. #EXTINF:0,bar
  4. http://barfoo


 
J'ai donc modifié ton code, stealth35, pour arriver à ce que je veux :

Code :
  1. echo preg_replace('/(#\w+:\d+,foo\s+)(\S+)/', '$1\nhuhu', $str);


Mais ça ne fonctionne toujours pas.


---------------
Be the one with the flames.
n°2038989
Dj YeLL
$question = $to_be || !$to_be;
Posté le 29-11-2010 à 10:59:27  profilanswer
 

stealth35 a écrit :


 
ça modifie rien ca  :sarcastic:


 
Bah si [:spamafote]
 

Code :
  1. $str = <<<HEREDOC
  2. #EXTINF:0,foo
  3. http://foobar
  4. #EXTINF:0,bar
  5. http://barfoo
  6. HEREDOC;
  7.  
  8. $pattern = '`(#EXTINF:0,foo\n).*`';
  9. echo preg_replace($pattern, '\1huhu', $str);
  10.  
  11. /*
  12. #EXTINF:0,foo
  13. huhu
  14. #EXTINF:0,bar
  15. */


---------------
Gamertag: CoteBlack YeLL
n°2038991
Riot
Buy me a riot
Posté le 29-11-2010 à 11:02:57  profilanswer
 

Dj YeLL, ce pattern n'est pas matché :/


---------------
Be the one with the flames.
mood
Publicité
Posté le 29-11-2010 à 11:02:57  profilanswer
 

n°2038992
stealth35
Posté le 29-11-2010 à 11:03:16  profilanswer
 

chez moi ca fait

 
Code :
  1. #EXTINF:0,foo
  2. http://foobar
  3. #EXTINF:0,bar
  4. http://barfoo
 

et même du-coup ca marche pas, ca fais que 1 remplacement, et ca surprime toute la ligne

 
Riot a écrit :

Hello,

 

Merci pour votre aide.
Pour info, l'extrait de fichier que j'ai donné est le contenu d'une playlist .m3u.
Dans "#EXTINF:0,foo", foo désigne le nom du média ; et la ligne suivante désigne l'URI de ce média.
Ce que j'ai besoin de faire est de remplacer l'URI d'un média défini par une autre URI.

 

Dans l'exemple que j'ai donné en 1er post, je voudrais remplacer http://foobar qui suit foo par huhu. Donc au final je veux ça :

Code :
  1. #EXTINF:0,foo
  2. huhu
  3. #EXTINF:0,bar
  4. http://barfoo
 

J'ai donc modifié ton code, stealth35, pour arriver à ce que je veux :

Code :
  1. echo preg_replace('/(#\w+:\d+,foo\s+)(\S+)/', '$1\nhuhu', $str);


Mais ça ne fonctionne toujours pas.

 

pourquoi \n tu t'attend a quoi en faisant ca ?

 


sinon

 
Code :
  1. $str = <<<HEREDOC
  2. #EXTINF:0,foo
  3. http://foobar
  4. #EXTINF:0,bar
  5. http://barfoo
  6. HEREDOC;
  7.    
  8. echo preg_replace('/(#\w+:\d+,(foo)\s+)(\S+)/', '$1huhu', $str);

Message cité 1 fois
Message édité par stealth35 le 29-11-2010 à 11:09:14
n°2038993
Riot
Buy me a riot
Posté le 29-11-2010 à 11:05:28  profilanswer
 

Riot a écrit :

Dj YeLL, ce pattern n'est pas matché :/


Ah si pardon, j'ai rien dit. Ça fonctionne !

Message cité 1 fois
Message édité par Riot le 29-11-2010 à 11:05:45

---------------
Be the one with the flames.
n°2038995
Riot
Buy me a riot
Posté le 29-11-2010 à 11:06:46  profilanswer
 

stealth35 a écrit :

pourquoi \n tu t'attend a quoi en faisant ca ?


Je sais pas, c'est pas vraiment cette partie qui est importante :)


---------------
Be the one with the flames.
n°2039000
Dj YeLL
$question = $to_be || !$to_be;
Posté le 29-11-2010 à 11:20:07  profilanswer
 

Riot a écrit :


Ah si pardon, j'ai rien dit. Ça fonctionne !


 
Ben j'avais testé quand même :o


---------------
Gamertag: CoteBlack YeLL
n°2039003
stealth35
Posté le 29-11-2010 à 11:24:55  profilanswer
 

enfaite chez moi ca marche pas a cause des sauts de ligne, y'a juste un \n donc ca pose problème si les saut de ligne systeme sont pas les mêmes
dans le doute utilise \s+ a la place \n

n°2039004
Dj YeLL
$question = $to_be || !$to_be;
Posté le 29-11-2010 à 11:37:35  profilanswer
 

C'est pas faux :o


---------------
Gamertag: CoteBlack YeLL
n°2039007
Riot
Buy me a riot
Posté le 29-11-2010 à 11:42:28  profilanswer
 

Merci beaucoup à vous deux !


---------------
Be the one with the flames.
n°2039303
Riot
Buy me a riot
Posté le 30-11-2010 à 17:53:13  profilanswer
 

Re-bonjour,

 

En fait j'ai encore un petit soucis : il est possible que le nom du flux ("foo" dans mon exemple) contienne des parenthèses : "foo (bar)". Du coup l'expression régulière ne fonctionne plus.
Et pour compliquer le tout, il est aussi possible qu'il y ait plusieurs noms de flux ayant des parenthèses :

Code :
  1. #EXTINF:0,foo (bar)
  2. url://foobar
  3. #EXTINF:0,foo (beef)
  4. url://foobeef
 

Vous savez comment palier ce problème ?


Message édité par Riot le 01-12-2010 à 13:28:43

---------------
Be the one with the flames.
n°2039430
Riot
Buy me a riot
Posté le 01-12-2010 à 15:14:56  profilanswer
 

En fait je m'en suis sorti avec un str_replace avant la requête : replacer '(' par '\(' et ')' par '\)'.


---------------
Be the one with the flames.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  preg_replace [résolu]

 

Sujets relatifs
[PHP] Erreur preg_replace[Résolu] preg_replace et preg_match_all dans les choux
[preg_replace] ne remplace pas les occurences sur une même lignepreg_replace sur page perso sfr : comment contourner le pb ?
preg_match replace et REGEXPprobleme de regex et preg_replace
[solved]Preg_replace en Ignorant les contenus des tags HTMLPreg replace surligner des mots mais pas des balises
preg_replace : problèmes d'expression régulièreSoucis avec preg_replace et balises
Plus de sujets relatifs à : preg_replace [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR