Vous pouvez faire attention à ce qui est considéré comme une lettre, et cela dépend de votre environnement local. L'utilisation de ISO Latin-1 permet de faire correspondre les caractères en caractères occidentaux accentués sous forme de lettres. Dans le programme suivant, les paramètres régionaux par défaut ne reconnaissent pas é et créé ne correspond pas. Décommentez le code de paramètres régionaux, puis il commence à correspondre.
Notez également que \ w inclut des chiffres et le caractère de soulignement avec toutes les lettres. Pour obtenir seulement les lettres, vous devez prendre le complément des caractères non-alphanum, chiffres et traits de soulignement. Cela ne laisse que des lettres. Cela pourrait être plus facile à comprendre en l'encadrant comme la question «Quelle expression régulière correspond à n'importe quel chiffre sauf 3?», Et la réponse est/[^ \ D3] /.
#! /usr/local/bin/perl
use strict;
use warnings;
# uncomment the following three lines:
# use locale;
# use POSIX;
# setlocale(LC_CTYPE, 'fr_FR.ISO8859-1');
while (<DATA>) {
chomp;
if (/([^\W_0-9])\1+/) {
print "$_: dup [$1]\n";
}
else {
print "$_: nope\n";
}
}
__DATA__
100
food
créé
a::b
Pour seulement lettres permuter \ w pour [a-zA-Z]. – TomC
@TomC: Ce n'est pas UNICODE sûr! –
Maintenant, je peux remplacer les lettres doublées pour un seul: Regex.Replace (str, @ "(\ w) \ 1+", "$ 1"); merci Adam. –