簡體   English   中英

我想在 perl 中進行搜索替換。 我的文件有“time1”、“+time1”、“+time11”、“time11”之類的字符串。如何區分這4個字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM