Вы можете подумать о предварительной обработке вашей строки перед выполнением сопоставления.Если у вас есть список допустимых символов, который в вашем примере представляет собой только az и AZ, вы можете использовать оператор транслитерации tr///
, чтобы удалить все остальные символы, и lc
, чтобы указать строчную строку.Флаги на tr
c
дополняют совпадение, т. Е. Сопоставляют все, что не указано в списке, и d
удаляют все совпадения, которые не имеют замены, поскольку замена пуста, что означает все совпадения.
$string =~ tr/a-zA-Z//cd;
$string = lc $string;
Если вы используете символы вне диапазона ASCII, вам нужно быть немного умнее.
$string =~ s/\P{L}+//g;
$string = fc $string;
Прежде всего мы используем регулярное выражение, чтобы удалить любой символ Unicode, который не входит в общийПисьмо категории.И затем мы используем функцию fc
, чтобы сложить регистр строки, это та же самая функция, которую Perl использует для сопоставления регулярных выражений без учета регистра.Обратите внимание, что вы можете сначала нормализовать строку.