Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблон состоящий из нескольких вариантах, Сократить по возможности код 
:(
    Опции темы
Aleshka
Дата 24.1.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 10.12.2007
Где: Харьков

Репутация: нет
Всего: нет



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


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый Aleshka, можно попробовать вариант

Код

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



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Aleshka
Дата 24.1.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 10.12.2007
Где: Харьков

Репутация: нет
Всего: нет



Нет, ginnie. Такой вариант работать не будет!!!
Решение я уже нашел, кому интересно вот оно:
if ($line =~ /(?:XXX+1|YYY+2|WWW+3)/){
И выполняем здесь какой-то код.
}
PM MAIL ICQ   Вверх
amg
Дата 24.1.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



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

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


Это сообщение отредактировал(а) amg - 24.1.2008, 12:24
PM MAIL   Вверх
Aleshka
Дата 25.1.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 10.12.2007
Где: Харьков

Репутация: нет
Всего: нет



О, я не знал про-то что этот код будет медленно работать спасибо учту.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.