【正则表达式】多次不同置换

【正则表达式】多次不同置换

比如我想把一个变量前面加一个begin,后面添加end,可以这么做

[Copy to clipboard] [ - ]
CODE:
        $var =~ s/^/begin/ig;
        $var =~ s/$/end/ig;

我想能不能一次性在一个s///里面完成呢?也就是能不能一个s///里面多个不同置换?
这样也许效率高些。。
$str =~ s/(123)/$prefix . $1 . $suffix/eg;


[Copy to clipboard] [ - ]
CODE:
$var = 'begin'.$var.'end';

要知道,$ 和 . 都是匹配不了换行符的

$var =~ s/^($var)$/begin\1end/;   我试过可以


QUOTE:
原帖由 linhao 于 2007-11-22 16:55 发表
$var =~ s/^($var)$/begin\1end/;   我试过可以

你这种写法直接用字符串连接更容易些
你们误会了,我在上面只是举了一个例子,我是说任意的两个不同的置换,比如把所有的red-》black,而white-》blue之类的,是任意的,这样能不能做到


QUOTE:
原帖由 azhoulinux 于 2007-11-22 20:38 发表
你们误会了,我在上面只是举了一个例子,我是说任意的两个不同的置换,比如把所有的red-》black,而white-》blue之类的,是任意的,这样能不能做到

"你们"包括2楼吗?
抱歉,包括
比如有一段字符串,要把里面所有的red-》black,white-》blue可以如下
$var =~ s/red/black/ig;
$var =~ s/white/blue/ig;

能用一个 =~ s///ig 解决吗?
汗, 原来是这样.

你可以将待匹配和替换都放在%hash,
for (keys %hash) {
    $var =~ /\Q$_\E/$hash{$_}/ieg;
}