Pour la question directe, vous pouvez tout simplement besoin \p{L}
(Lettre) Unicode Character Property
Cependant, plus important encore, décoder tous vos commentaires et encode sortie.
use warnings;
use strict;
use feature 'say';
use utf8; # allow non-ascii (UTF-8) characters in the source
use open ':std', ':encoding(UTF-8)'; # for standard streams
use Encode qw(decode_utf8); # @ARGV escapes the above
my $string = 'El Guapö';
if (@ARGV) {
$string = join ' ', map { decode_utf8($_) } @ARGV;
}
say "Input: $string";
$string =~ s/[^\p{L} ]//g;
say "Processed: $string";
Exécuté comme script.pl 123 El Guapö=_
Input: 123 El Guapö=_
Processed: El Guapö
Je l'ai utilisé la "couverture" \p{L}
propriété (Lettre), comme description spécifique fait défaut; ajuster si/comme nécessaire. Les propriétés Unicode fournissent beaucoup, voir le lien ci-dessus et la liste complète au perluniprops.
L'espace entre 123 El
reste, peut-être des espaces de début de bande (et de fin) à la fin. Notez qu'il existe également \P{L}
, où P
indique la négation.
ci-dessus simple d'esprit \pL
ne fonctionnera pas avec Combining Diacritical Marks, comme la marque sera également supprimé. Merci à jm666 pour le signaler. Cela se produit lorsqu'un caractère "logique" accentué (ce qui apparaît comme un seul caractère) est écrit en utilisant des caractères séparés pour son caractère de base et pour des marques sans espacement (combinant les accents). Souvent, un seul caractère (extended grapheme cluster) avec son codepoint existe également. Exemple: en niño
le ñ
est U+OOF1
mais il peut également être écrit "n\x{303}"
.
Pour garder accents écrit ainsi ajouter \p{Mn}
(\p{NonspacingMark}
) à la classe de caractères
my $string = "El Guapö=_ ni\N{U+00F1}o.* nin\x{303}o+^";
say $string;
(my $nodiac = $string) =~ s/[^\pL ]//g; #/ naive, accent chars get removed
say $nodiac;
(my $full = $string) =~ s/[^\pL\p{Mn} ]//g; # add non-spacing mark
say $full;
de sortie
El Guapö=_ niño.* niño+^
El Guapö niño nino
El Guapö niño niño
Vous voulez s/[^\p{L}\p{Mn} ]//g
afin de garder les accents de combinaison.
Bien sûr, les ajouter à la classe de caractères? – sln
Voulez-vous conserver par ex. Caractères chinois? – melpomene
Vous souciez-vous de combiner les accents? Par exemple. Si vous avez LA LETTRE MINUSCULE LATINE O suivie de LA DIAERÈSE COMBINÉE, voulez-vous les garder toutes les deux? – melpomene