замена регулярного выражения, которая добавляет текст - PullRequest
2 голосов
/ 12 мая 2011

Я пытаюсь переписать ссылку в моем мобильном приложении (написано в ruby).Мне бы хотелось, чтобы можно было выполнить обе эти перезаписи с помощью одного регулярного выражения:

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

Самое близкое, что я получил, заменив это:

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

следующим1007 *

$1example.com

Это работает для m.subd.example.com, но не работает для m.example.com из-за моего "www."исключение.

Я делаю это много, поэтому мне бы хотелось, чтобы это было очень быстро, поэтому я стараюсь избегать использования любого кода, только одного регулярного выражения.Является ли это возможным?Есть ли какая-то необычная особенность регулярного выражения, о которой я не знаю?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Я пытаюсь избежать использования любого кода, только одно регулярное выражение

Regex - это код. Более сложное регулярное выражение требует больше времени для запуска. Вам нужно написать код или запустить два регулярных выражения.

result = subject.gsub(/m\.([a-z.]*)example\.com/, '\1example.com').gsub(/^example\.com/, 'www.example.com')
0 голосов
/ 12 мая 2011

Я не знаю 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...