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

时间:2014-10-21 15:19:43

标签: regex

如果我有字符串aab12a221b1,我想将其替换为zzy12z221y1(即将a替换为z,将b替换为y用一个正则表达式可以做到这一点吗?两个单独的表达式将是微不足道的(/a/g -> z/b/g -> y),但我正在寻找一种方法来实现这一点,而无需运行多个正则表达式。到目前为止,我一直无法找到任何办法。

具体来说,我正在使用grepWin对大量文件进行一些替换,并且我需要用其他字符替换四个字符。运行四而不是一个所需的时间是最小的,我没有时间限制,所以这更像是一个假设的问题而不是其他任何问题。

1 个答案:

答案 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