Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Задачка на регулярные выражения


Автор: nIkTo 7.4.2010, 11:13
Подскажите как из нижеуказанной строки, выбрать все доменныее имена.
Условия :
1) TLD только .com
2) доменное имя заканчивается символами (:, _, @, /, $)
3) без учёта регистра

сразу занести все совпадения в массив, решение в одну строку ...

вот строка :
Код

my $str = 'test1.domain.com:sdsdf%fsdfsf-test2.domain.com.ru_here:file.comandos@DoMaIN.cOm/e545/345345/tEST.COM';


домены :
Цитата

test1.domain.com
DoMaIN.cOm
tEST.COM

Автор: ginnie 7.4.2010, 11:22
Может так?
Код

my $str = 'test1.domain.com:sdsdf%fsdfsf-test2.domain.com.ru_here:file.comandos@DoMaIN.cOm/e545/345345/tEST.COM';
my @result = $str =~ m{([\w\.]+com)(?:[:_@/]|$)}gi;

Автор: nIkTo 7.4.2010, 11:44
ginnie, вот это не понятно как работает 
Код
(?:[:_@/]|$)
 поясните пожалуйста.

Автор: ginnie 7.4.2010, 14:31
Писал регулярное выражение по-наитию, поэтому возможны ошибки. Мне кажется, что этот фрагмент шаблона выбирает подстроки с символом : или _ или @ или / или конец строки без захвата. Я не знаю, можно ли в классе использовать конец строки и как, поэтому использовал |.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)