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