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

  FORUM HardWare.fr
  Programmation
  PHP

  Ces satanées expressions régulières...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ces satanées expressions régulières...

n°595588
kalios
Prout !
Posté le 22-12-2003 à 14:58:18  profilanswer
 

Novice en la matière d'ereg, je souhaiterai rechercher dans une chaîne la syntaxe suivante:
 
Débutant par : '<!--[' ou '['
Finissant par: ']-->'  ou ']'
 
contenant    : 'value1="value2"'
 
il peut y avoir des espaces après et avant l'egal ainsi qu'au début et à la fin du contenu.
 
Je veux pouvoir retourner dans un tableau value1 et value2 ces valeurs peuvent contenir 'a'-'z' ou 'A'-'Z' ou '_' ou '-'
 
puis en fin de compte, je souhaite en fonction de value1 et de value2 remplacer la chaîne complete recherchée par une valeur value3...
 
Pouvez-vous m'aider ?


---------------
.:coin:.
mood
Publicité
Posté le 22-12-2003 à 14:58:18  profilanswer
 

n°595592
kalios
Prout !
Posté le 22-12-2003 à 15:05:33  profilanswer
 

J'avais comme idée ceci:
 

Code :
  1. $pat = "[<!--\[|\[]([a-zA-Z_-])\S*=\S*["?([a-zA-Z_-])"?|(([a-zA-Z_-]))][\]-->|\]]"
  2. ereg($pat,$string,$result);
  3. $i = 0;
  4. while($resultat=TraitementResult($result[$i])) {
  5.    $i++;
  6.    $pat2 = "[<!--\[|\[]$resultat[value1]\S*=\S*["?$resultat[value2]"?|(([a-zA-Z_-]))][\]-->|\]]";
  7.    ereg_remplace($pat2, $resultat[value3], $string);
  8. }


 
Evidemment ca marche pas...


Message édité par kalios le 22-12-2003 à 15:06:07

---------------
.:coin:.
n°595613
kalios
Prout !
Posté le 22-12-2003 à 15:40:58  profilanswer
 

Bon.. Decidemment je n'ai rien compris du tout...
 
 
En testant la base, je m'apperçois que ca marche pas...
 

Code :
  1. $pattern = "([a-z]*)";
  2. $text    = "je suis une chaine de caractere";
  3. ereg($pattern,$text,$tab);
  4. for($i=0;$tab[$i];$i++) echo($tab[$i]."<BR>\n" );


 
Techniquement ceci ne devrait me placer dans le tableau tab chaque mot de ma chaine ?


Message édité par kalios le 23-12-2003 à 11:13:05

---------------
.:coin:.
n°595981
kalios
Prout !
Posté le 23-12-2003 à 11:12:28  profilanswer
 

Arrrrrrrggrrrrr Aidez-moi.. Ca fait des heures que je cherche et ca marche pas....
 
 
Pourquoi:
 

Code :
  1. $pattern = "([a-z]*)";
  2. $text    = "je suis une chaine de caractere";
  3. ereg($pattern,$text,$tab);
  4. for($i=0;$tab[$i];$i++) echo($tab[$i]."<BR>\n" );

 
 
Ne marche pas !!!!!
 
Elle est où mon erreur....
 
 
Flute de Zut de M..de
 
 


---------------
.:coin:.
n°595986
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-12-2003 à 11:23:11  profilanswer
 

essaye comme ça plutot:

Code :
  1. <?php
  2. $pattern = "([a-z]*)";
  3. $text    = "je suis une chaine de caractere";
  4. preg_match_all($pattern,$text,$tab);
  5. for($i=0;$tab[$i];$i++){
  6.   print_r($tab[$i]);
  7. }
  8. ?>

n°596003
kalios
Prout !
Posté le 23-12-2003 à 12:12:31  profilanswer
 

Ok ca ca marche, merci ... Je ne sais pas la différence ntre  
 
pref_match_all et ereg bon....
 
 
Si je complique un peu l'expression par "c([a-z]*)" ca ne fonctionne plus, pourquoi ?  
 
théoriquement je devrais avoir comme résultat: chaine et caractère...


---------------
.:coin:.
n°596004
kalios
Prout !
Posté le 23-12-2003 à 12:13:17  profilanswer
 

Kalios a écrit :

Ok ca ca marche, merci ... Je ne sais pas la différence ntre  
 
pref_match_all et ereg bon....
 
 
Si je complique un peu l'expression par "c([a-z]*)" ca ne fonctionne plus, pourquoi ?  
 
théoriquement je devrais avoir comme résultat: haine et aractère...
 


---------------
.:coin:.
n°596006
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-12-2003 à 12:16:10  profilanswer
 

désolé j'ai oublié un truc dans mon code :o

Code :
  1. $pattern = "/([a-z]*)/";


 
ce qui dans ton deuxieme cas devient:

Code :
  1. $pattern = "/c([a-z]*)/";


 
edit: on peut pas mettre du gras entre les balises cpp?


Message édité par anapajari le 23-12-2003 à 12:16:41
n°596008
Mara's dad
Yes I can !
Posté le 23-12-2003 à 12:17:44  profilanswer
 

Code :
  1. $pat = '/\[([a-zA-Z_]+)="([a-zA-Z_]+)"\]/';
  2. $str = "qertaertyazery<!--[toto=\"abc_rg\"]-->aeryhazerthazrt";
  3. if( preg_match( $pat, $str, $res ) )
  4. {
  5. echo( "<pre>" );
  6. print_r( $res );
  7. echo( "</pre>" );
  8. }


 
Pas la peine de tester <!-- et --> puisque sans ça marche aussi !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°596013
kalios
Prout !
Posté le 23-12-2003 à 12:27:50  profilanswer
 

mara's dad a écrit :

Code :
  1. $pat = '/\[([a-zA-Z_]+)="([a-zA-Z_]+)"\]/';
  2. $str = "qertaertyazery<!--[toto=\"abc_rg\"]-->aeryhazerthazrt";
  3. if( preg_match( $pat, $str, $res ) )
  4. {
  5. echo( "<pre>" );
  6. print_r( $res );
  7. echo( "</pre>" );
  8. }


 
Pas la peine de tester <!-- et --> puisque sans ça marche aussi !


 
Faut que je test tout ca...  
 
L'idée de tester <!-- et --> est de pouvoir éliminer ces balises de commentaires lors du templacement de chaine


---------------
.:coin:.
mood
Publicité
Posté le 23-12-2003 à 12:27:50  profilanswer
 

n°596015
kalios
Prout !
Posté le 23-12-2003 à 12:30:13  profilanswer
 

Qu'es-ce que le / dans l'expression régulière ?


---------------
.:coin:.
n°596017
Mara's dad
Yes I can !
Posté le 23-12-2003 à 12:30:35  profilanswer
 

Ben j'ai pas trouvé de truc simple pour inclure <!-- et -->.
Utiliser 2 patterns. La première avec et si çà foire, ben sans :/


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°596019
Mara's dad
Yes I can !
Posté le 23-12-2003 à 12:33:21  profilanswer
 

Kalios a écrit :

Qu'es-ce que le / dans l'expression régulière ?  


C'est le délimiteur, comme le ' ou " pour une chaîne.
Après le délimiteur, tu peux mettre des codes qui modifient le fonctionnement du pattern
 
Par exemple i pour 'case insensitive'
 
/toto/i
 
Va matcher toto, mais aussi Toto ou TOTO, ToTo...
 
Y'en à d'autres, faut lire la doc :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°596030
kalios
Prout !
Posté le 23-12-2003 à 12:58:30  profilanswer
 

Ok ca me parait plus clair qu'avant...
 
Je vous ennuie encore une dernière fois:
 
Je peux avoir dans une chaîne les balises suivantes:
 
<!--[baliseName]-->
[baliseName]
<!--[baliseName=value]-->
[baliseName=value]
[baliseName= value]
<!--[baliseName= "value"]-->
<!--[baliseName="value"]-->
[baliseName="value"]
[baliseName= "value"]
 
donc:
 
le <!-- avec le --> est facultatif  
le " avec le " est facultatif  
 
et le value est facultatif aussi...
 
Comment puis-je faire pour faire des condition ?
 
Dois-je faire plusieurs expressions régulières et tester plusieurs fois la chaine ?


---------------
.:coin:.
n°596033
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-12-2003 à 13:07:21  profilanswer
 

perso je le ferais en deux fois, tu récupères tout ce qui est entre crochet, et après tu split le résultat sur le = .
Mais en une seule regex c'est jouable ça doit donner un truc comme ça:

Code :
  1. /\[(.*?)(\]|=(.*?)\])/


Attention à pas s'embrouiller entre les resultats dans les différents tableaux.


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

  Ces satanées expressions régulières...

 

Sujets relatifs
[PHP] verification d'email - expressions régulieres[PHP] Expressions régulières... elle marche pas comme je veux...
Expressions régulières...[Perl] substitutions, expressions régulières et dictionnaire ...
Expressions régulières 
Plus de sujets relatifs à : Ces satanées expressions régulières...


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