Переключение регистра

При замене часто бывает нужно обеспечить правильный регистр символов в заменяющем слове (нижний или верхний в зависимости от ситуации). Задача легко решается в Perl при помощи служебных последовательностей с обратной косой чертой. Комбинация \U преобразует все последующие символы к верхнему регистру:

$_ = "I saw Barney with Fred.";
s/(fred|barney)/\U$1/gi; # $_ теперь содержит "I saw BARNEY with FRED."

Аналогичная комбинация \L обеспечивает преобразование к нижнему регистру. Продолжение предыдущего фрагмента:

s/(fred|barney)/\L$1/gi; # $_ теперь содержит "I saw barney with fred."

По умолчанию преобразование распространяется на остаток (заменяющей) строки; также можно вручную отменить переключение регистра комбинацией \E:

s/(\w+) with (\w+)/\U$2\E with $1/i; # $_ содержит "I saw FRED with barney."

При записи в нижнем регистре (\l и \u) эти комбинации влияют только на следующий символ:

s/(fred|barney)/\u$1/ig; # $_ теперь содержит "I saw FRED with Barney."

Они даже могут использоваться в сочетании друг с другом. Например, объединение \u с \L означает: «все в нижнем регистре, но первая буква в верхнем регистре»:

s/(fred|barney)/\u\L$1/ig; # $_ теперь содержит "I saw Fred with Barney."

Хотя сейчас мы рассматриваем переключение регистра в связи с заменой, эти комбинации работают в любой строке, заключенной в кавычки:

print "Hello, \L\u$name\E, would you like to play a game?\n";

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
m// в списочном контексте
Глобальная замена (/g)
Другие возможности регулярных выражений
Другие ограничители
Замена с использованием оператора s///