我正在尝试在文件中查找正则表达式的所有匹配项并替换它们。我想在多个步骤中找到匹配项。例如,我想首先找到两个 $IDENTIFIER_ 之间的模式,然后在该模式中将所有 $ONE 替换为 $TWO。
这是我到目前为止所拥有的:
$entireFile = "Some random text here var_a 4456 var_b var_c 1122 var_d var_e 559 var_f Some random text here ";
my $ONE_="1";
my $TWO_="2";
my $IDENTIFIER_ = "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b";
my $id1;
my $id2;
my $item;
while ($entireFile =~ m/($IDENTIFIER_)(.*?)($IDENTIFIER_)/g)
{
$id1 = $1;
$item = $2;
$id2 = $3;
#Check to see if $item has $ONE and replace with $TWO
if ($item =~ s/(.*?)$ONE_(.*?)/$1$TWO_$2/g )
{
print $id1.$item.$id2."\n" ;
}
}
这打印:
var_c 2222 var_d
我需要帮助的是如何打印文件的其余部分(第一个匹配之前的文本、后续匹配之间的文本以及最后一个匹配之后的文本)。