preg_replace italique

preg_replace italique - PHP - Programmation

Marsh Posté le 19-11-2006 à 12:22:33    

Bonjour,  
 
Je tente d'écrire une fonction preg_replace qui met en italique tout texte entre guillemets (" ).  
 
J'avais pensé à ceci :  
 

Code :
  1. function smarty_modifier_italique($in)
  2. {
  3.   $out = preg_replace (
  4.     "/([\"a-zA-Z0-9-_.\"])/",
  5.       "<i>$1</i>",
  6.       $in);
  7.      
  8. return $out;
  9. }


 
mais ça me met TOUT mon texte en italique - peu importe qu'il se trouve entre guillemets ou pas, sauf les caractères accentués.  
 
Quelqu'un pourrait svp m'aider un peu là ?

Reply

Marsh Posté le 19-11-2006 à 12:22:33   

Reply

Marsh Posté le 19-11-2006 à 12:27:02    

pattern = '#"(.*)"#U'
remplacement = '<i>$1</i>'


Message édité par afbilou le 19-11-2006 à 12:27:42
Reply

Marsh Posté le 19-11-2006 à 12:37:14    

putain, et en plus ça marche !!!!
c'est quoi au juste les # et U pour que je comprenne ce qui se passe ???
un grand merci en tous cas !

Reply

Marsh Posté le 19-11-2006 à 12:42:04    

Ben le # c'est ni plus ni moins le caractere que j'ai choisi comme délimiteur d'expression regulieres PCRE.
 
Le U c'est une option de recherche PCRE. Ungreedy : pour rendre le masque de recherche non gourmand.
Par défaut si on recherche "a.*a" dans la chaine "1a2a345a6a789" l'expression réguliere va matcher la plus longue chaine qui satisfait ta recherche et tu vas avoir "a2a345a6a" comme résultat.
Si tu veux avoir "a2a" et "a6a" il te faut rendre le quantificateur * non gourmand avec l'option U dans le masque de recherche.

Reply

Marsh Posté le 19-11-2006 à 13:12:58    

afbilou a écrit :

Ben le # c'est ni plus ni moins le caractere que j'ai choisi comme délimiteur d'expression regulieres PCRE.
 
Le U c'est une option de recherche PCRE. Ungreedy : pour rendre le masque de recherche non gourmand.
Par défaut si on recherche "a.*a" dans la chaine "1a2a345a6a789" l'expression réguliere va matcher la plus longue chaine qui satisfait ta recherche et tu vas avoir "a2a345a6a" comme résultat.
Si tu veux avoir "a2a" et "a6a" il te faut rendre le quantificateur * non gourmand avec l'option U dans le masque de recherche.


 
ahaaa !!! donc ceci aurait aussi marché :  
 

Code :
  1. '/"(.*)"/U'


 
J'ai compris l'ungreedy.  
 
Merci beaucoup

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed