*
" et son dérivé "+
"
sont souvent appelés quantificateursopérateur | nombre de répétitions du motif | exemple de filtrage | mots filtrés |
---|---|---|---|
* | 0 fois ou plus | m/a*/ | mot vide, a, aa, aaa ... |
+ | 1 fois ou plus | m/a+/ | a, aa, aaa ... |
? | 0 ou 1 fois | m/a?/ | mot vide ou a |
{n} | n fois exactement | m/a{4}/ | aaaa |
{n,} | au moins n fois | m/a{2,}/ | aa, aaa, aaaa ... |
{,n} | au plus n fois | m/a{,3}/ | mot vide, a, aa ou aaa |
{n,m} | entre n et m fois | m/a{2,5}/ | aa, aaa, aaaa ou aaaaa |
?
' est équivalent à '{0,1}'
.|
"\une_lettre_minuscule
"
:s
comme space)d
comme digit, = chiffre
en anglais)w
comme word)_
',
et l'absence du tiret '-
'. _
',
et l'absence du tiret '-
'. \w
)
dépend du jeu de caractères employé.\p{nom_de_la_propriété}
avec \p
minuscule
(et \P{nom_de_la_propriété}
avec \P
majuscule
pour désigner la négation).
Lu
ou UppercaseLetter
désigne la classe des lettres majuscules, Ll
ou LowercaseLetter
celle des lettres minuscules.\p{Lu}\p{Ll}+
'
va
donc décrire les noms dont l'initiale est majuscule et le reste
(non-vide) en minuscules,Lu
et Ll
illustrées ci-dessus. UnicodeData.txt
, \p{BidiClass:R}
désignant les
caractères qui s'écrivent de droite à gauche,WhiteSpace
et leurs dérivés comme Alphabetic
ou ASCII
.Greek
, Latin
, Han
...In
'.InHiragana
(bloc) est fonctionnellement identique à Hiragana
(script),Latin
).Greek
recouvre les deux blocs Greek and
Coptic (le grec moderne, monotonique, U+0370 - U+03FF) \p{Greek}
et \p{In_Greek_and_Coptic}
.In
', In_Greek_and_Coptic.
Paul-Émile
, décrits par \p{Lu}\p{Ll}+(-\p{Lu}\p{Ll}+)?
\p{ma_déf}
et \P{ma_déf}
.sub MajLat {et
return("+utf8::Lu\n" . "&utf8::Latin\n");
}
sub MinLat {
return("+utf8::Ll\n" . "&utf8::Latin\n");
}
\p{MajLat}\p{MinLat}+(-\p{MajLat}\p{MinLat}+)?
http://perldoc.perl.org/perlunicode.html#User-Defined-Character-Properties
&
' que l'on voit dans les
exemples ci-dessus. &
"
for the
first set; that would be intersecting with nothing (resulting in an
empty set).^
'
et '$
', qui doivent
apparaître en tête (resp. en queue) de l'e.r. :^
'
signale que
la chaîne filtrée doit apparaître au début du texte$
'
signale que
la chaîne filtrée doit apparaître à la fin du texte$chn
=~ m/expreg/
réussit dès que $chn
contient une sous-chaîne conforme à l'exp.reg.).'Paul-Émile'
=~ m/^\p{MajLat}\p{MinLat}+(-\p{MajLat}\p{MinLat}+)?$/
est vrai, mais'le père de Paul-Émile' =~ m/^\p{MajLat}\p{MinLat}+(-\p{MajLat}\p{MinLat}+)?$/
est faux.^
'
(resp. '$
') ne peut être précédé (resp. suivi)
d'un autre caractère dans l'e.r.(^début... ) | (...fin$)
',
voire un choix entre deux structures '(^struct1$)
| struct2
'.\b
',
qui signale une frontière de mot (b
comme boundary).'le père de Paul-Émile' =~ m/\b\p{MajLat}\p{MinLat}+(-\p{MajLat}\p{MinLat}+)?\b/
est vrai, mais'le père dePaul-Émile' =~ m/\b\p{MajLat}\p{MinLat}+(-\p{MajLat}\p{MinLat}+)?\b/
est faux.NomsNotes.txt
).
Paul-Émile 12
Marie-Hélène 05
Éléonore 14
etc....
fichier TestNotes.pl
# Construction d'un tableau (hash) à partir de texte
use strict;
use warnings;
sub construire ($) { # nom de fichier -> hash
my ($fich) = @_;
open(ENTREE, "<utf8", $fich);
my $formatNote = '^[01]\d|20$';
my $formatNom = '^\p{Lu}\p{Ll}+(-\p{Lu}\p{Ll}+)?$';
my %res;
my $k = 0;
my @tablignes = <ENTREE>;
foreach my $ligne ( @tablignes ){
$k++;
chomp($ligne); # supprime le
"\n" final
my ($le_nom, $la_note) =
split( /\s+/, $ligne);
if( $le_nom !~ m/$formatNom/
){
die("Erreur sur $le_nom, ligne $k");
}
if( $la_note !~
m/$formatNote/ ){
die("Erreur sur la note de $le_nom, ligne $k");
}
$res{$le_nom} = $la_note;
}
return %res;
}# construire
sub TxtVersHash($){
my ($fichIn) = @_;
my %res = construire($fichIn);
print %res;
}#TxtVersHash
binmode(STDOUT, ":utf8");
TxtVersHash($ARGV[0]);
TestNotes-1.pl
qui va détecter une erreur dans le fichier NomsNotes-1.txt
,TestNotes
n'y verra que du feu...TestNotes-2.pl
qui sera satisfait avec NomsNotes-1.txt
,TestNotes-3.pl
qui va détecter une erreur dans NomsNotes-1.txt
,NomsNotes-2.txt
pour le satisfaire.TestNotes-4.pl
qui va détecter une erreur dans NomsNotes-2.txt
,NomsNotes-1.txt
à son goût.sub MinGrecModerne {
return("+utf8::Ll\n" .
"&utf8::In_Greek_and_Coptic\n"
. "-03AC 03B0\n" .
"-03CC 03CE\n" );
}