perl一次性替换多个串字符串

最近策划非要搞一堆一样的脚本,然后其中的一些效果ID需要替换成别新的,

这样的ID总共有50多个,替换软件的话只能一个一个搞,还担心中间搞错了,比如,复制粘贴过程中,只复制了原ID,新的ID没有换,那就把原ID替换成了上一个要替换的新ID.

于是网上搜搜看一次性替换多个字符串的方法,这个方法如下: 

 

#!/usr/bin/perl

use strict;
use warnings;

my %replace = (
    quick => "slow",
    lazy  => "energetic",
);

my $regex = join "|", keys %replace;
$regex = qr/$regex/; # qr 创建正则表达式

my $s = "The quick brown fox jumps over the lazy dog";

$s =~ s/($regex)/$replace{$1}/g;

print "$s\n";

 

但是这个替换有一个缺陷

this approach will have problems if you'll ever want to have 2 replace strings that one of them is prefix of another (for example: "dep"=>1, "depesz" => 2). to avoid the problem you should sort the keys of %replace by descreasing length of key. – user80168

 

简单来讲就是两个key不能有子串关系,否则的话,需要人为的给sort一下keys让长串在前面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值