如果我有字符串aab12a221b1
,并且我想用zzy12z221y1
替换它(即用z
替换a
,用y
替换b
),那么用一个正则表达式可以做到这一点吗?两个单独的表达式(/a/g -> z
、/b/g -> y
)是微不足道的,但我正在寻找一种方法来实现这一点,而不必运行多个正则表达式。到目前为止,我一直找不到任何方法来做到这一点。
具体来说,我使用grepWin在大量文件中进行一些替换,其中有四个字符需要用其他字符替换。运行四个而不是一个所需的时间是最少的,而且我没有时间限制,所以这更像是一个假设性的问题。
这可能无法解决您的特定问题,但一般来说,如果您可以使用perl正则表达式,则可以使用e
修饰符将捕获的组作为参数传递给用于替换的函数。
%map = ("a", "z",
"b", "y");
sub get_mapping{
return $map{"$_[0]"};
}
$str=~s/([ab])/get_mapping($1)/eg;
此处运行的示例:http://ideone.com/nVJTXk