Глава 7: Регулярные выражения.
7.5 Операция замены
Мы уже говорили о простейшей форме операции замены: s/ регулярное_выражение/новая_строка/. Пора рассмотреть несколько разновидностей этой операции.
Если вы хотите, чтобы замена выполнялась при всех возможных совпадениях, а не только при первом, добавьте в запись, задающую проведение операции замены, букву д, например:
$_ = "foot fool buffoon";
s/foo/bar/g; # $_ теперь содержит "bart barl bufbarn"
В заменяющей строке производится интерполяция переменных, что позволяет задавать эту строку во время выполнения:
$_ = "hello, world";
$new = "goodbye";
s/hello/$new/; # заменяет hello на goodbye
Символы сопоставления (метасимволы) в регулярном выражении позволяют выполнять сопоставление с образцом, а не просто с символами, трактуемыми буквально:
$_ = "this is a test";
s/(\w+()/<$1>/g; # $_ теперь содержит "<this><is> <a><test>"
Вспомните, что в $1 заносятся данные, полученные при совпадении с первой заключенной в круглые скобки частью образца.
Суффикс i (перед буквой g или после нее, если она есть) заставляет используемое в операции замены регулярное выражение игнорировать регистр, как и аналогичная опция в ранее рассмотренной нами операции сопоставления.
Как и в операции сопоставления, можно выбрать другой разделитель, если косая черта неудобна. Для этого просто нужно использовать один символ три раза*:
s#fred#barney#; # заменить fred на barney, как в s/fred/barney/
Как и при сопоставлении, можно с помощью операции =~ указать другой объект для проведения замены. В этом случае объект должен быть таким, которому можно присвоить скалярное значение, — например, скалярной переменной или элементом массива:
$which = "this is a test";
$which =~ s/test/quiz/; # $which теперь содержит "this is a quiz"
$someplace[$here] =~ s/left/right/; # заменить элемент массива
$d{"t"} =~ s/^/x /; # поставить "х" перед элементом массива
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|