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

  FORUM HardWare.fr
  Programmation
  PHP

  Un regex qui tient compte des caractères d'échappement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un regex qui tient compte des caractères d'échappement

n°986600
dwogsi
Défaillance cérébrale...
Posté le 18-02-2005 à 21:10:00  profilanswer
 

Voilà en fait je travail sur un script de coloration syntaxique du code, qui permettrais également, entre autres, de détecter les erreurs les plus fréquentes.
 
Donc je me suis basé sur des choses élémentaires:
- Une parenthése ouvrante entraine un parenthése fermante.
- Une acollade ouvrante...
 
Donc un script qui compte les parenthèses dans le code saisi et qui fait la différence entre les deux est capable d'indiquer s'il en manque, logique.
 
Bon je parlais de coloration, et bien mon vrai problème c'est avec les caractéres d'échapement, parce qu'en fait je voudrais colorer les chaines qui se trouvent entre guillemets donc voici ma fonction:
 

Code :
  1. $str = preg_replace("#(&quot;.*?&quot;)#is","<font color=red>\\1</font>",$str);


 
Mais si comme code je met:
 

Code :
  1. echo "Hello le \"monde\"";


 
Et bien la coloration obtenue est la suivante:
 
echo "Hello le \"monde\"";
 
Logique me direz vous mais comment faire pour que cela ne se produise pas svp?


Message édité par dwogsi le 21-02-2005 à 18:44:37
mood
Publicité
Posté le 18-02-2005 à 21:10:00  profilanswer
 

n°986602
masklinn
í dag viðrar vel til loftárása
Posté le 18-02-2005 à 21:14:08  profilanswer
 

en remplaçant .*? par .*
[:petrus75]
 
(c'est bien sûr une blagounette, je précise)
 
edit: plus sérieusement:
il faut utiliser une "negative lookbehind assertion" ( (?<!...) )
 
En gros, une regexp qui est initialement

\".*?\"


devient

\".*?((?<!\\)\" )


le 2e ' " ' ne match que s'il n'est pas précédé de ' \ '


Message édité par masklinn le 18-02-2005 à 21:25:44

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°988827
dwogsi
Défaillance cérébrale...
Posté le 21-02-2005 à 17:34:14  profilanswer
 

Merci beaucoup ca marche maintenant!

n°988921
dwogsi
Défaillance cérébrale...
Posté le 21-02-2005 à 18:46:33  profilanswer
 

Bah en fait non correction, excusez moi...
Mais ca ne marche pas!
 
Je vous montre ma nouvelle fonction avec ma nouvelle expression régulière:
 

Code :
  1. $str = preg_replace("#(&quot;.*?((?<!\\))&quot;)#is","<font color=red>\\1</font>",$str);


 
Et voici l'erreur que j'ai:
Compilation failed: missing ) at offset 25
 
Donc j'ai bien compris que ca voulais dire qu'il manque une ) mais ou??? Moi je vois pas....

n°988974
soju
One shot !
Posté le 21-02-2005 à 19:19:24  profilanswer
 

Code :
  1. $str = preg_replace("#(&quot;.*?(?<!\\)&quot;)#is","<font color=red>\\1</font>",$str);


n°989014
KangOl
Profil : pointeur
Posté le 21-02-2005 à 19:50:40  profilanswer
 

Code :
  1. $str='echo "Hello le \"monde\"";';
  2. $str = preg_replace('#("(?:\\\.|[^\\\"])*?" )#is',"<span style='color:red;'>\\1</span>",$str);
  3. echo $str;


 
ca marche
source : http://www.regexlib.com/REDetails.aspx?regexp_id=355


---------------
Nos estans firs di nosse pitite patreye...
n°989450
dwogsi
Défaillance cérébrale...
Posté le 22-02-2005 à 01:14:18  profilanswer
 

Merci bien cette fois ci ca marche mais juste une petite dernière question avec des &quot; à la place des " ca donnerai quoi comme expression parceque pour le moment j'ai mit un str_replace pour remplacer les &quot; par un " mais je trouve pas ca trés top.

n°989820
soju
One shot !
Posté le 22-02-2005 à 14:23:41  profilanswer
 

oups celle que j'avais mis ne marche pas :(
qui sait comment on met un \ dans une assertion arriere ??


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

  Un regex qui tient compte des caractères d'échappement

 

Sujets relatifs
pb avec une chaine de caractères [RESOLU]Compte de forums en relation
Vérification d'existence compte utilisateur dans L'ADSelection de caracteres de facon aleatoire
Afficher des caractères spéciaux sous Internet Explorer[c] Comment saisir une chaine de caractères
Renvoyer les valeurs commençant par XXX caractères.Combien de caractères maxi sur une ligne shell unix ???
[Fortran 95] Conversion de types numériques en chaine de caractèresaffiche ip+navigateur sur panneau souris qui tient!!!!!
Plus de sujets relatifs à : Un regex qui tient compte des caractères d'échappement


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