正则表达式替换添加文本

时间:2011-05-11 20:49:12

标签: regex expression

我正在尝试在我的移动应用程序中进行链接重写(用ruby编写)。我希望它能够用一个正则表达式完成这两个重写:

m.example.com -> www.example.com
m.subd.example.com -> subd.example.com

我最接近这个:

m\.([a-z\.]*)example\.com

用这个:

$1example.com

这适用于m.subd.example.com,但由于我的“www”,m.example.com失败了。异常。

我这样做很多,所以我希望它非常快,这就是为什么我试图避免使用任何代码,只是一个正则表达式。可能吗?正如我所不知道的正则表达式有一个奇特的功能吗?

2 个答案:

答案 0 :(得分:0)

我不知道Ruby,但是这里有一个Perl脚本可以完成你给出的示例。可能是它可以翻译。

#!/usr/local/bin/perl
use strict;
use warnings;

my @list = qw/m.example.com m.subd.example.com/;
my $re = qr#^m\.(.*)(example\.com)$#;
foreach(@list) {
  print $_;
  s/$re/($1 || "www.") . $2/e;
  print " -> $_ \n";
}

<强>输出:

m.example.com -> www.example.com 
m.subd.example.com -> subd.example.com 

答案 1 :(得分:0)

  

我试图避免使用任何代码,只需一个正则表达式

正则表达式是代码。更复杂的正则表达式需要更长的运行时间。您需要编写一些代码或运行两个正则表达式。

result = subject.gsub(/m\.([a-z.]*)example\.com/, '\1example.com').gsub(/^example\.com/, 'www.example.com')