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

  FORUM HardWare.fr
  Programmation
  Perl

  Expression reguliere - je ne comprends pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Expression reguliere - je ne comprends pas

n°1684498
Christalin​e
Ca coule de source
Posté le 10-02-2008 à 02:22:57  profilanswer
 

Hello,
 
Je ne comprends pas pourquoi le code ci dessous "MATCH" en Perl [:at war with emo]
 

Code :
  1. my $var = '<ABC><X><X><Z>';
  2. if ($var =~ m/^<a.*?><x><z>$/i)
  3. {
  4.     print("MATCH" );
  5. }
  6. else
  7. {
  8.     print("NOT MATCH" );
  9. }


 
J'ai deux fois la balise "<x>" et je veux matcher l'expression que quand elle n'y est qu'UNE seule fois. Qui a t-il de faux dans mon expression régulière ?
 
Merci.  :jap:


Message édité par Christaline le 10-02-2008 à 02:26:51
mood
Publicité
Posté le 10-02-2008 à 02:22:57  profilanswer
 

n°1684519
matafan
Posté le 10-02-2008 à 08:34:28  profilanswer
 

Oui remplace ton "." par "[^>]" ou un truc dans le genre.

n°1684569
Christalin​e
Ca coule de source
Posté le 10-02-2008 à 13:07:52  profilanswer
 

OK. Merci  :jap:

n°1698065
PakHG
Posté le 06-03-2008 à 11:11:23  profilanswer
 

Bonjour, j'ai besoin de votre aide. Je dois extraire une chaîne de caractère depuis un fichier mais le probleme c'est que toute les élements d'une chaine sont espacés, ex: a r b r e  c i t r o n.
Entre chaque expression il y a plusieurs espaces donc je voudrais supprimer l'espace lorsqu'il n'y a qu' un seul espace pour que "c i t r o n" devienne "citron".
J'ai essayer cela: $machaine =~ s/[\s]{1}//g       mais sans succès.
Avez-vous une idée? Merci.

n°1698069
Elmoricq
Modérateur
Posté le 06-03-2008 à 11:13:47  profilanswer
 

s/\s([^\s])/$1/g

n°1698075
PakHG
Posté le 06-03-2008 à 11:16:47  profilanswer
 

ok je te remercie, ca marche!! ;)

n°1698076
FlorentG
Posté le 06-03-2008 à 11:16:48  profilanswer
 

PakHG a écrit :

Bonjour, j'ai besoin de votre aide. Je dois extraire une chaîne de caractère depuis un fichier mais le probleme c'est que toute les élements d'une chaine sont espacés, ex: a r b r e  c i t r o n.


Je parie une bière qu'ils ne sont pas espacés, mais que le fichier est tout simplement encodé en utf-16

n°1698077
PakHG
Posté le 06-03-2008 à 11:17:53  profilanswer
 

en faite tu prend un espace qui n'est pas suivi par un autre espace?? mais je ne comprend pas le $1.

n°1698078
FlorentG
Posté le 06-03-2008 à 11:18:33  profilanswer
 

C'est quoi comme fichier à la base ?

n°1698079
PakHG
Posté le 06-03-2008 à 11:18:33  profilanswer
 

Florent comment je peux savori s'il est encodé en utf-16?? merci

mood
Publicité
Posté le 06-03-2008 à 11:18:33  profilanswer
 

n°1698080
PakHG
Posté le 06-03-2008 à 11:18:52  profilanswer
 

un fichier de log d'observation windows

n°1698085
FlorentG
Posté le 06-03-2008 à 11:19:50  profilanswer
 

Ouais, sûrement encodé en utf-16 ou en ucs-2.

n°1698087
PakHG
Posté le 06-03-2008 à 11:20:42  profilanswer
 

ok

n°1698088
Elmoricq
Modérateur
Posté le 06-03-2008 à 11:21:06  profilanswer
 

PakHG a écrit :

en faite tu prend un espace qui n'est pas suivi par un autre espace?? mais je ne comprend pas le $1.


Quand tu matches dans un s///, toute la première partie matchée est remplacée par la seconde.
Si tu matches "un espace suivi d'un non-espace", les deux caractères disparaîtront si la seconde partie ne contient rien.
Je place donc le "caractère qui n'est pas un espace" entre parenthèse, pour en faire un match qui pourra être rappelé dans la seconde partie par $1 (un deuxième groupement sera $2, et ainsi de suite).
 
Donc, la regexp signifie :
- on recherche tout espace suivi d'un non-espace
- on place le non-espace en mémoire
- on remplace le match par ce qui a été placé en mémoire

n°1698093
PakHG
Posté le 06-03-2008 à 11:25:46  profilanswer
 

d'accord je te remercie de ton explication. maintenant j'ai une autre petite question.  
J'ai une ligne du style:  
@  r  M Print SERVEUR Èé¸jÅÅ´n­©Ž9 77 HP.172.SERVEUR  12121 3 P LLZ Z
 
Je voudrais récupérer le nom de l'imprimante HP.172.SERVEUR et le nombre de page, ici 3. Le probleme étant que j'ai des impressions sur plusieurs imprimante dont une lexmark comment puis-je récupérer ces données parmis toutes les lignes? merci

n°1698105
PakHG
Posté le 06-03-2008 à 11:34:53  profilanswer
 

en faite vu que toutes les imprimantes ont un nom finissant par serveur on pourrait récupérer tout ce qui se trouve avant serveur jusqu'au 1er espace
.

n°1698112
Elmoricq
Modérateur
Posté le 06-03-2008 à 11:40:33  profilanswer
 

Le plus simple c'est de lire la documentation : http://perldoc.perl.org/perlretut.html

n°1698115
PakHG
Posté le 06-03-2008 à 11:42:04  profilanswer
 

ok :)


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

  Expression reguliere - je ne comprends pas

 

Sujets relatifs
Expression conditionnelleshmget: comportement que je ne comprends pas
comment ecrire après une expression lue avec lex?Probleme expression reguliere
Imprimer les lignes avant et apres l'expression rechercherExpression régulière pour moteur de recherche...
help sur une expression régulière 
Plus de sujets relatifs à : Expression reguliere - je ne comprends pas


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