[Perl] utf8 et lettre à

Laurent Rosenfeld laurent.rosenfeld at googlemail.com
Ven 16 Sep 21:07:21 CEST 2016


Bonsoir Charles,

il y a un problème dans ta regex:

/<toto>(*?)\s*</toto>/
        ÎÎ
car le quantificateur *? ne quantifie rien. Si je suppose que tous voulais
écrire:
/<toto>(.*?)\s*</toto>/
alors, je confirme que ça fonctionne aussi en Perl 6:

my $test = "<toto>déjà</toto>";
say ~$0 if $test ~~ m/ '<toto>' (.*?)\s*   '</toto>'/;

Ce qui affiche bien "déjà", comme les précédentes tentatives.

Bonne soirée,
Laurent.




Le 16 septembre 2016 à 16:33, minc <minc.charles at wanadoo.fr> a écrit :

> Sorry fausse bonne nouvelle c'était le "a macron" et non 'à' :-[ .
>
> Le 16/09/2016 16:29, minc a écrit :
>
> The last but not the less ;-)
> Le test avec un Strawberry perl 5.24.0 est correct !
>
> @++.
>
> Charles
>
> Le 16/09/2016 10:37, minc a écrit :
>
> Bonjour Laurent,
>
> Il me semble que le seul statement qui pose problème soit manquant :
> /<toto>(*?)\s*</toto>/
>
> En effet , le "no greeny" entraîne que le  NO-BREAK SPACE 'A0'
>
> est mangé par la présence du \s (et je dois rectifier, la doc pour
> unicode précise que ce caractère fait partie du groupe s
> http://perldoc.perl.org/perlrecharclass.html).
>
> Il s'ensuit donc que le 'à'  en bytes 'C3 AO' se retrouve amputer du
> second byte, d'où
> le résultat inattendu.
>
> Merci et en espérant donc que le pb n'existe pas en Perl6.
>
> Cordialement.
>
> Charles
> Le 15/09/2016 23:04, Laurent Rosenfeld a écrit :
>
> Bonsoir Charles,
>
> En tous les cas, en Perl 6 sous Windows, ça marche direct, sans
> utilisation d'aucun pragma:
>
>
> my $test = "<toto>déjà</toto>" ;
>
> say ~$0 if $test ~~ m/ '<toto>' (.*?)      '</toto>'/ ;
> say ~$0 if $test ~~ m/ '<toto>' \s*(.*)\s* '</toto>'/ ;
> say ~$0 if $test ~~ m/ '<toto>' \s*(.*)\s* '</toto>'/ ;
>
> Ce qui donne:
>
> C:\Users\Laurent>perl6 deja.pl6
> déjà
> déjà
> déjà
>
> (Et ça marche exactement pareil sous Debian).
>
> Cordialement,
> Laurent.
>
> Le 15 septembre 2016 à 17:43, minc <minc.charles at wanadoo.fr> a écrit :
>
>> Il est écrit quelque part :
>>
>> U+00A0 NO-BREAK SPACE (not matched by \s)
>>
>> mais :
>>
>> my $test=encode_utf8( decode_utf8 "<toto>déjà</toto>") ;
>>
>> my $reg1=qr{<toto>(.*?)</toto>} ;
>> my $reg2=qr{<toto>\s*(.*)\s*</toto>} ;
>> my $reg3=qr{<toto>\s*(.*?)\s*</toto>} ;
>> $test=~m/$reg1/ ;
>> say $1 ;
>> $test=~m/$reg2/ ;
>> say $1 ;
>> $test=~m/$reg3/ ;
>> say $1 ;
>>
>> qui donne :
>>
>> déjà
>> déjà
>> déjxC3
>>
>> [pour les sceptiques il peuvent essayer en remplaçant 'à' par 'ā' ( le a
>> macron ;)  ) ou une autre lettre] CQFD = bug Charles Charles
>> Le 15/09/2016 à 14:30, minc a écrit :
>>
>> Non , d'ailleurs le pragma use utf8  est ici , inutile puisque que cette
>> directive porte essentiellement sur le texte du programme lui-même et je
>> travaille avec des fichiers dont je contrôle les entrées et les sorties.
>> J'ai néanmoins testé et dans mon cas les longueurs de mots deviennent
>> erronées, sans pour autant remédier à la question. J'utilise un perl
>> 5.16.3, windows 7 et les fichiers xml sources sont en UTF8. Merci. Merci
>> Laurent (ce n'est pas critique, j'ai mes résultats, mais cette exception
>> est curieuse, le même résultat est obtenu avec chop ! ).  Le 15/09/2016 à
>> 13:27, Dominique Asselineau a écrit :
>>
>> Bonjour, Les 2 lignes suivantes sont-elles présentes dans les
>> déclarations : use utf8; use feature 'unicode_strings'; Dominique minc
>> wrote on Thu, Sep 15, 2016 at 01:17:23PM +0200
>>
>> Bonjour, J’extraie des mots d'un dictionnaire en xml avec la regex
>> suivante  :  my $extract=qr{<orthography>\s*(?<word>.*?)\s*</orthography>}
>> ; les résultats sont correctes sauf pour les mots se terminant par 'à' tel
>> que "déjà" ou j'obtiens "déj\xC3" sachant que 'à' en utf8 est la suite 'C3
>> A0'. Les autres caractères accentués ne me semble pas poser de problème. Le
>> résultat est corrigé avec :      my $extract=qr{<orthography>(?<word>.*?)</orthography>}
>> ; Quelle hypothèse peut-on formuler pour expliquer cette "troncation" ?
>> Merci. Charles begin:vcard note;quoted-printable:Put your hand on a hot
>> stove for a minute, and it seems like an hour. Sit=      with a pretty girl
>> for an hour, and it seems like a minute. That's relat=     ivity.=0D=0A=
>>     (A. Einstein) version:2.1 end:vcard _______________________________________________
>> Perl mailing list Perl at mongueurs.net http://listes.mongueurs.net/ma
>> ilman/listinfo/perl
>>
>> _______________________________________________
>> Perl mailing listPerl at mongueurs.nethttp://listes.mongueurs.net/mailman/listinfo/perl
>>
>> _______________________________________________ Perl mailing list
>> Perl at mongueurs.net http://listes.mongueurs.net/mailman/listinfo/perl
>
> _______________________________________________
> Perl mailing listPerl at mongueurs.nethttp://listes.mongueurs.net/mailman/listinfo/perl
>
> _______________________________________________
> Perl mailing listPerl at mongueurs.nethttp://listes.mongueurs.net/mailman/listinfo/perl
>
> _______________________________________________
> Perl mailing listPerl at mongueurs.nethttp://listes.mongueurs.net/mailman/listinfo/perl
>
>
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
>
>
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/mailman/private/perl/attachments/20160916/44709b07/attachment.html>


Plus d'informations sur la liste de diffusion Perl