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

  FORUM HardWare.fr
  Programmation
  Divers

  [php, shell, ...] Expression régulière

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php, shell, ...] Expression régulière

n°292510
Castor666
:°)=
Posté le 23-01-2003 à 13:38:26  profilanswer
 

Il y'a a :
  - "abc": chaine contenant la chaine "abc"
  - "[^abc]": chaîne qui ne commence pas par a, b ou c
Mais je n'arrive pas a trouver :
- chaine qui ne contient pas "abc"
 
Pourquoi je cherche ça?
J'en aurait besoins pour arriver par exemple a mettre en gras, le texte entouré des balise <i></i> (donc en italique).
Le probleme, c'est que si le texte est : "<i>1</i> 2 <i>3</i>"
Le "2" se met aussi en gras avec l'expression régulière "(<i> )(.*)(</i> )"
 
J'ai pensé alterné "(<i> )(.*)(</i> )" et "(</i> )(.*)(<i> )", avec une boucle for sur le texte jusqu'a ce que toute les balise soient misent, mais avec des balises trop comlexes ça ne marche plus.
 
Donc connaissez vous l'expression régulière dont j'ai besoins? :
(balise1)(texte, sans balise2)(balise2), ce qui résoudrait mon problème.
Ou alors une autre astuce pour le résoudre (php dans ce cas)?

mood
Publicité
Posté le 23-01-2003 à 13:38:26  profilanswer
 

n°292562
matafan
Posté le 23-01-2003 à 15:08:44  profilanswer
 

Ton problème vient du fait que le "*" (comme tous les quantificateurs) des regexp est "avide" : il match le plus de caractères possibles. En perl, tu peux faire suivre un quantificateur ("*", "+"...) du caractère "?", ce qui le forcera au contraire à matcher le moins de caratères possibles.
 
Pour ton exemple ça donne donc : "</i>(.*?)<i>".
 
Pour PHP je ne sais pas vraiment, mais je me suis laissé dire qu'il reconnaissaient les regexp Perl...

n°292721
Castor666
:°)=
Posté le 23-01-2003 à 17:38:57  profilanswer
 

Dommage, j'ai essayé ce que tu m'as dit ça ne marche pas..
Pourtant les expressions régulières PHP sont celle de posix, donc ça devrait être plutot standard.  
 
Bon, j'essaye a nouveau mon idée, en essayer de la purifier.
Merci de ton aide ;)

n°292780
matafan
Posté le 23-01-2003 à 18:49:49  profilanswer
 

Justement c'est pas POSIX, c'est une extension Perl. Mais les fonctions PHP en preg_* doivent comprendre cette syntaxe, non ?

n°292864
Castor666
:°)=
Posté le 23-01-2003 à 20:36:07  profilanswer
 

J'ai essayé mais ça fait une erreur..
Mais je croit que la solution que j'ai trouvé est bonne, ça fonctionne bien pour le moment avec des choses simple. Je continurai ça demain.

n°1925990
sinamone
Posté le 23-09-2009 à 00:02:02  profilanswer
 

soluce:
 
sed "s/\(<i>\)\([^\<]\|\<[^\/]\|\<\/[^i]\)*\(<\/i>\)/\1X\3/g" fichier


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

  [php, shell, ...] Expression régulière

 

Sujets relatifs
[SHELL] pb de formatage de nombre ou pb de date ?[Shell Bash]Problemes de tri
[SHELL] Traitement des chaîne de caractères[Shell]Encore mes problemes de programmation de scripts :(
Expression régulière help me[Shell- Bash]Encore des questions de noob
[UNIX-Shell]Questions de noob pour faire des scripts[Shell - Batch] Comment masquer le prog dos ...
problème avec la commande eval [shell de Bourne] 
Plus de sujets relatifs à : [php, shell, ...] Expression régulière


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