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

  FORUM HardWare.fr
  Programmation
  PHP

  expression reguliere preg_replace

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

expression reguliere preg_replace

n°1289931
attentio
Posté le 23-01-2006 à 11:57:56  profilanswer
 

bonjour,
je voudrais remplacer dans une variable certaines chaines de caractère par d'autres.
plus précisement, les balises <a href= ...>...</a> deviendront [LIEN=...]...[/LIEN] et <a href="mailto:...>...</a> deviendront [MAIL]...[MAIL]
 
j'ai fais ceci :

Code :
  1. <?
  2. $texte='<a href="http://monsite.fr">visiter</a><br><a href="mail:contact@monsite.fr">contact@monsite.fr</a>';
  3. $texte = preg_replace('`\<a href="([^[]+)\">([^[]+)\</a>`s', '[LIEN=$1]$2[/LIEN]', $texte);
  4. $texte = preg_replace('`\<a href="mailto:([^[]+)\">([^[]+)\</a>`s', '[MAIL]$1[/MAIL]', $texte);
  5. echo $texte;
  6. ?>

mais ca ne marche pas tres bien!
 
comment faire?
 
merci de votre aide

mood
Publicité
Posté le 23-01-2006 à 11:57:56  profilanswer
 

n°1289944
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-01-2006 à 12:24:06  profilanswer
 

Moi j'aurais plus fait comme ça:

Code :
  1. <?php
  2. $texte='<a href="http://monsite.fr">visiter</a><br><a href="mailto:contact@monsite.fr">contact@monsite.fr</a>';
  3. $pattern = array (
  4.   '#<a href="mailto:(.*?)">(.*?)</a>#i',
  5.   '#<a href="(.*?)">(.*?)</a>#i'
  6. );
  7. $replace = array(
  8.   "[MAIL]$1[/MAIL]",
  9.   "[LIEN=$1]$2[/LIEN]"
  10. );
  11. $texte = preg_replace($pattern, $replace, $texte);
  12. echo $texte;
  13. ?>


Mais fait bien attention à l'ordre dans lequel tu définis tes patterns, parce que si tu mets LIEN avant MAIL, vu que le masque est LIEN est valide sur les chaines MAIL ( oups pas sur d'être clair), tu n'auras jamais de MAIL...

Message cité 1 fois
Message édité par anapajari le 23-01-2006 à 12:24:22
n°1289948
benamoubea​ch
tivuplai
Posté le 23-01-2006 à 12:29:51  profilanswer
 

anapajari a écrit :


Mais fait bien attention à l'ordre dans lequel tu définis tes patterns, parce que si tu mets LIEN avant MAIL, vu que le masque est LIEN est valide sur les chaines MAIL ( oups pas sur d'être clair), tu n'auras jamais de MAIL...


 
 
C'est exactement ce que j'allais dire :)

n°1291088
attentio
Posté le 24-01-2006 à 16:22:42  profilanswer
 

merci beaucoup !!!  
par contre j'ai un petit soucis dans le sans inverse
 
ex:


[B][/B] me donne  
[[B]][<[/B]l<<font class="t[IMG]tre[/IMG]>><<</font>">>ul>B]
alors que je devrais avoir <b></b>
[U][/U] me donne  
[[U]][<[/U]l<<font class="t[IMG]tre[/IMG]>><<</font><font class="t">tre">><u>l><</font>u>]
alors que je devrais avoir <u></u>


 
voici mon code :

Code :
  1. $pattern = array ( 
  2. '#[MAIL](.*?)[/MAIL]#i', 
  3. '#[LIEN=(.*?)](.*?)[/LIEN]#i',
  4. '#[LIST]

    • (.*?)#i',
    • '#[*](.*?)#i',
    • '#[/LIST]#i',
    • '#[I](.*?)[/I]#i',
    • '#[U](.*?)[/U]#i',
    • '#[B](.*?)[/B]#i',
    • '#[TITRE](.*?)[/TITRE]#i',
    • '#[IMG](.*?)[IMG]#i'
    • );
    • $replace = array(  '
    • <a href="mailto:$1">$1</a>', 
    • '<a href="$1">$2</a>',
    • '<ul><li>$1',
    • '</li><li>$1',
    • '</li></ul>',
    • '<i>$1</i>',
    • '<u>$1</u>',
    • '<b>$1</b>',
    • '<font class="titre">$1</font>',
    • '<img src="$1">'
    • );
    • $descript2 = preg_replace($pattern, $replace, $descript2);


je n'y comprends rien  :ange:  
 
merci de votre aide


Message édité par attentio le 24-01-2006 à 16:26:45
n°1291286
attentio
Posté le 24-01-2006 à 19:33:49  profilanswer
 

plus simplement :

Citation :

[B]ca marche pas[/B] devient ]<r>[]ca marche pas[/B]


Code :
  1. <?
  2. //marche
  3. $texte='<b>ca marche</b>';
  4. echo $texte;
  5. $pattern2 = array ('#<b>(.*?)</b>#i',);
  6. $replace2 = array("[B]$1[/B]" );
  7. $texte = preg_replace($pattern2, $replace2, $texte);
  8. echo '<br>->'.$texte;
  9. //ne marche pas
  10. $texte2="<br>[B]ca marche pas[/B]";
  11. $pattern = array ('#[B](.*?)[/B]#i');
  12. $replace = array('<b>$1</b>');
  13. $texte2 = preg_replace($pattern, $replace, $texte2);
  14. echo '<br>'.$texte2;


 
merci infiniment

n°1291531
Dj YeLL
$question = $to_be || !$to_be;
Posté le 24-01-2006 à 22:53:01  profilanswer
 

[B] veut dire que tu remplace les caractère compris dans l'ensemble [...] (c'est à dire "B" ...
 
donc [B] deviendra [[B]]
 
Il faut penser à échapper les caractères spéciaux ;)
 
\[B\]


---------------
Gamertag: CoteBlack YeLL
n°1291532
Dj YeLL
$question = $to_be || !$to_be;
Posté le 24-01-2006 à 22:54:02  profilanswer
 

Si tu t'en sors pas, tu peux aussi utiliser preg_quote qui le fait à ta place


---------------
Gamertag: CoteBlack YeLL

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

  expression reguliere preg_replace

 

Sujets relatifs
Appel variable XSL dans une expression XPathprobleme d'expression reguliere
Expression régulière casse-têteExpression reguliere pour un regexpfielvalidator
(débutant)grep et expression régulièreEreg et preg pour page référée
Plus de sujets relatifs à : expression reguliere preg_replace


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