Le Thu, 14 Nov 2002 07:27:19 +0100
anne.aublanc@??? écrivait :
> Me dire comment tester, toujours en perl, une ligne de ce type :
> xxxxxx;yyyyyyy
>
> xxxxx = 1er champ
> yyyyy = 2ème champ
>
> Les champs peuvent contenir n'importe quel caractère sauf le ;
>
> Les 2 champs sont séparés par un ;
>
> La ligne que j'ai écrite pour le test :
> if ($ligne =~ m!(.*?);(.*?)$!gi)
. trouve n'importe quel caractère (sauf \n)
* trouve si 0 occurence (ou plus)
? trouve si 0 ou 1 occurence exactement
.*? veut dire : « chaîne de n'importe quoi sauf un retour chariot, au
besoin rien du tout, d'itération quelconque, présente une fois ou non ».
>
> cela fonctionnait jusqu'à ce que je rencontre un ' dans un des champs!
>
Le ' est un caractère interprété par Perl. Si tu le rencontres, tu dois
aussi le tester :
(.*?)||(\'*?)
cela pour le motif générique « quelque chose (ou pas) suivi ' (ou pas) »
et donc
((.*?)||(\'*?))*
pour être générique.
donc m/((.*?)||(\'*?))*/((.*?)||(\'*?))*/gi
> Si vous avez la solution...
Il se peut qu'il faille un peu adapter suivant ce que tu cherches
vraiment...
PK
--
Patrice KARATCHENTZEFF
STMicroelectronics Tel: 04-76-92-63-81
850, rue Jean Monnet
38926 CROLLES Cedex, France Courriel: patrice.karatchentzeff@???