Expression reguliere - je ne comprends pas

Expression reguliere - je ne comprends pas - Perl - Programmation

Marsh Posté le 10-02-2008 à 02:22:57    

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
Reply

Marsh Posté le 10-02-2008 à 02:22:57   

Reply

Marsh Posté le 10-02-2008 à 08:34:28    

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

Reply

Marsh Posté le 10-02-2008 à 13:07:52    

OK. Merci  :jap:

Reply

Marsh Posté le 06-03-2008 à 11:11:23    

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.

Reply

Marsh Posté le 06-03-2008 à 11:13:47    

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

Reply

Marsh Posté le 06-03-2008 à 11:16:47    

ok je te remercie, ca marche!! ;)

Reply

Marsh Posté le 06-03-2008 à 11:16:48    

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

Reply

Marsh Posté le 06-03-2008 à 11:17:53    

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

Reply

Marsh Posté le 06-03-2008 à 11:18:33    

C'est quoi comme fichier à la base ?

Reply

Marsh Posté le 06-03-2008 à 11:18:33    

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

Reply

Marsh Posté le 06-03-2008 à 11:18:33   

Reply

Marsh Posté le 06-03-2008 à 11:18:52    

un fichier de log d'observation windows

Reply

Marsh Posté le 06-03-2008 à 11:19:50    

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

Reply

Marsh Posté le 06-03-2008 à 11:20:42    

ok

Reply

Marsh Posté le 06-03-2008 à 11:21:06    

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

Reply

Marsh Posté le 06-03-2008 à 11:25:46    

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

Reply

Marsh Posté le 06-03-2008 à 11:34:53    

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
.

Reply

Marsh Posté le 06-03-2008 à 11:40:33    

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

Reply

Marsh Posté le 06-03-2008 à 11:42:04    

ok :)

Reply

Sujets relatifs:

Leave a Replay

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