$line =~ /([^:]+):/;
Оператор = ~ называется оператором связывания , он выполняет регулярное выражение или подстановку для скалярного значения (в данном случае $ line). Что касается самого регулярного выражения, ()
указывает захват. Захваты помещают текст, который соответствует им, в специальные глобальные переменные. Эти переменные пронумерованы, начиная с единицы, и соответствуют порядку, в котором отображаются скобки, поэтому задано
"abc" =~ /(.)(.)(.)/;
переменная $1
будет содержать "a"
, переменная $2
будет содержать "b"
, а переменная $3
будет содержать "c"
(если вы еще не догадались, .
соответствует одному символу *
). []
указывает класс персонажа. Классы символов будут соответствовать одному символу в них, поэтому /[abc]/
будет соответствовать одному символу, если это "a"
, "b"
или "c"
. Классы персонажей можно отменить, начав их с ^
. Класс отрицанных символов соответствует одному символу, который не указан в нем, поэтому [^abc]
будет соответствовать одному символу, который не "a"
, "b"
или "c"
(например, "d"
будет соответствовать). +
называется квантификатором. Квантификаторы сообщают вам, сколько раз предыдущий шаблон должен совпадать. +
требует, чтобы шаблон совпадал один или несколько раз. (для квантификатора *
шаблон должен соответствовать нулю или более раз). :
не имеет особого значения для движка регулярных выражений, поэтому он означает буквально :
.
Итак, сложив эту информацию вместе, мы увидим, что регулярное выражение будет соответствовать одному или нескольким символам, отличным от двоеточия (сохраняя эту часть в $1
), за которым следует двоеточие.
$line =~ s/([^:]+):/$replace/;
Это замена. Подстановки состоят из двух частей: регулярного выражения и строки замены. Часть регулярных выражений следует всем тем же правилам, что и обычные регулярные выражения. Запасная часть обрабатывается как строка в двойных кавычках. Подстановка заменяет все, что соответствует регулярному выражению, заменой, поэтому, учитывая следующий код
my $line = "key: value";
my $replace = "option";
$line =~ s/([^:]+):/$replace/;
Переменная $ line будет содержать строку "option value"
.
Возможно, вам будет полезно прочитать perldoc perlretut
.
*
за исключением новой строки, если не используется опция / m, и в этом случае она соответствует любому символу