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


Автор: Aleshka 24.1.2008, 11:31
Вопрос произвожу поиск в строках определенных условий. При этом код при совпадении будет один и тот же.
Я хочу сделать чтобы происходил поиск строк и которые подходят по одному из 3 условий, то я их мог обработать. Приведу пример:
if ($line =~ /XXX+1 || YYY+2 ||WWW+3 /){
выполнить какой-то код}. Но этот варианту меня не срабатывает. 
Как вариант все это можно было сделать просто:
if ($line =~ /XXX+1/){
Выполнить код
} 
elsif ($line =~/YYY+2/){
Выполнить этот же код}
elsif ($line =~/WWW+3/){
Выполнить этот же код}
Но данное решение мне кажется непрактичным.

Автор: ginnie 24.1.2008, 11:56
Уважаемый Aleshka, можно попробовать вариант

Код

if ($line =~ /(?:XXX+1)||(?:YYY+2)||(?:WWW+3)/o){

Автор: Aleshka 24.1.2008, 12:17
Нет, ginnie. Такой вариант работать не будет!!!
Решение я уже нашел, кому интересно вот оно:
if ($line =~ /(?:XXX+1|YYY+2|WWW+3)/){
И выполняем здесь какой-то код.
}

Автор: amg 24.1.2008, 12:21
Вариант ginnie будет работать, если вместо || использовать |. Но если перечислений много, то такое регулярное выражение может медленно работать. Более быстрый вариант:
Код

$_ = $line; # чтобы регулярки покороче были
if (/XXX+1/ || /YYY+2/ || /WWW+3/) {
  выполнить какой-то код
}

Автор: Aleshka 25.1.2008, 11:33
О, я не знал про-то что этот код будет медленно работать спасибо учту.

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