是否可以用一个正则表达式执行多个单独的替换



如果我有字符串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

最新更新