2011-05-11 6 views
2

私はモバイルアプリケーション(ルビーで書かれています)でリンクの書き換えをしようとしています。これでテキストを追加する正規表現置換

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

:私はこの置き換え得ている

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

最も近い:私は単一の正規表現でこれらの書き換えの両方を達成できるようにしたいと思い

$1example.com 

これはm.sub.example.comで機能しますが、私の "www"のためにm.example.comに失敗します。例外。

私はこれをたくさんしていますので、私はそれが非常に高速であることを望んでいます。なぜなら、ただ一つの正規表現を使用することを避けるためです。出来ますか?私が知りません正規表現のファンシーな機能はありますか?

+0

正規表現には*翻訳*(つまりm - > www)はありません。だから私は2つが必要だと思う。しかし、私はいくつかの答えを見て不思議です。 –

+0

それは確かに可能です。しかし、2つを組み合わせたい場合は、どの言語を使用するのかを知る必要があります。 (あなたは特定の言語の関数にマッチを渡すことができます) –

+0

私はルビーとjavascriptの両方でこれを行いたいので、いずれかの議論は歓迎されるでしょう。 – Andrew

答えて

0

私は任意のコードを使用しないようにしようとしています、ただ単一の正規表現

正規表現は、コードです。より複雑な正規表現は実行に時間がかかります。いくつかのコードを書くか、2つの正規表現を実行する必要があります。

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

この回答を正しく選択しました。ありがとうございました。残念ながら、私の質問に対する真の答えは「それは不可能です」と思われます。 – Andrew

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 
関連する問題