[英]Replace “existing_time” to “current_sys_time” between XML tags and update in file using Perl. (in format HH:MM:SS)
[英]I want to do a search replace in perl. My file has strings like "time1", "+time1", "+time11", "time11".How do I differentiate between these 4 strings
if ($search =~ /\W/){ #if search pattern has any special character
$sentence =~ s/\Q$search\E\b/$replace/g; #\Q..\E will consider special characters. \b is for word boundary
}
else {
$sentence =~ s/\b$search\b/$replace/g; #no need \Q..\E if not spl characters
}
}
print $sentence;
else 部分引起了問題,因為它正在替換 +time1 和 time1。 是否有一個正則表達式來處理這種情況,這樣我就不需要使用 if else 了?
my %map = (
"time1" => "...",
"+time1" => "...",
"time11" => "...",
"+time11" => "...",
);
my $pat =
join "|",
map quotemeta,
sort { length($b) <=> length($a) }
keys(%map);
s/($pat)/$map{$1}/g
#!/usr/bin/perl use Data::Dumper; $text = 'time1+............time1.............time11.............+time11...............'; print Dumper $text; $text =~ s/(.*)(time1)([^0-9].*)/$1$3/g; print Dumper $text;
Output 是:
$VAR1 = 'time1+............time1.............time11.............+time11...............'; $VAR1 = 'time1+.........................time11.............+time11...............';
如果取決於預期的結果。 或者,僅替換 time1:
#!/usr/bin/perl use Data::Dumper; $text = '............time1............+time1.............time11.............+time11...............'; print Dumper $text; $text =~ s/(.*)([^\+]time1)([^0-9].*)/$1$3/g; print Dumper $text;
輸出:
$VAR1 = '............time1............+time1.............time11.............+time11...............'; $VAR1 = '.......................+time1.............time11.............+time11...............';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.