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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярные выражения 
V
    Опции темы
Bulat
Дата 11.9.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



по регулярным выражениям тем много было, но с такой проблемой вроде не нашел.......
есть условие:
Код

...
if (($bufline!~m/starting/gi) && ($bufline=~m/delivery/gi) && ($bufline=~m/$delivery/gi))
{
...
}
...


так вот когда:
Код

if (($bufline!~m/starting/gi) 
{
...
}

все срабатывает нормально, а когда вместе с && ($bufline=~m/delivery/gi) && ($bufline=~m/$delivery/gi), не срабатывает???


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Romikgy
Дата 11.9.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



дык может ||


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Bulat
Дата 11.9.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Romikgy, но мне нужен and, а не or


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Romikgy
Дата 11.9.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



тогда уточни почему у тя то работает , а то нет.....
если выполняется это условие
Цитата(Bulat @  11.9.2006,  12:35 Найти цитируемый пост)
($bufline!~m/starting/gi)

а хоть одно из этих нет 
Цитата(Bulat @  11.9.2006,  12:35 Найти цитируемый пост)
($bufline=~m/delivery/gi) && ($bufline=~m/$delivery/gi)

то весь иф не выполнится, ты конкретно опиши что хочешь получить в конце


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Bulat
Дата 11.9.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Romikgy, ну мотри тогда по полной, у мну есть файл в котором встречаются такие строки:
Цитата

...
starting delivery 117504: msg 2522767 to local [email protected]
...
delivery 117504: success: did_0+0+1/
...


дык вот условие ($bufline!~m/starting/gi), соответственно на отсутствие в строке символа starting, мне нужно чтобы выцеплять все строки кроме starting delivery 117504: msg 2522767 to local [email protected]. И оно в одиночестве работает, действительно из файла выцепляются все строки(а там еще и другие есть), кроме вышеуказанной.

А условия ($bufline=~m/delivery/gi) && ($bufline=~m/$delivery/gi), мне нужны чтобы конкретно выцепить строку delivery 117504: success: did_0+0+1/, т.е ($bufline=~m/delivery/gi)~delivery, а ($bufline=~m/$delivery/gi)~117504(в конкретном случае). так вот когда я соединяю все три условия, он мне выцепляет не только delivery 117504: success: did_0+0+1/, но и starting delivery 117504: msg 2522767 to local [email protected], при наличии условия ($bufline!~m/starting/gi). А мне как раз строки типа starting delivery 117504: msg 2522767 to local [email protected] не нужны smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Romikgy
Дата 11.9.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Bulat @  11.9.2006,  13:18 Найти цитируемый пост)
на отсутствие в строке символа starting,

или присутствие?

Добавлено @ 14:22 
Цитата(Bulat @  11.9.2006,  13:18 Найти цитируемый пост)
($bufline!~m/starting/gi)

знака не заметил, смотрю далее

Добавлено @ 14:25 
имхо трабла в том что 
Цитата(Romikgy @  11.9.2006,  13:20 Найти цитируемый пост)
$bufline!~m/starting/gi

возвращает не логич. переменую а строковую
пробуй так
Код

if ($bufline!~m/starting/gi) 
if ($bufline=~m/delivery/gi) 
if ($bufline=~m/$delivery/gi)
{

}



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Bulat
Дата 11.9.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Цитата(Romikgy @  11.9.2006,  14:20 Найти цитируемый пост)
возвращает не логич. переменую а строковую
пробуй так
Код

if ($bufline!~m/starting/gi) 
if ($bufline=~m/delivery/gi) 
if ($bufline=~m/$delivery/gi)
{

}


точно так, может что-то в синтаксисе недопечатал? smile 

Это сообщение отредактировал(а) Bulat - 11.9.2006, 14:37


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Nab
Дата 11.9.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bulat, Уважаемый, можно я Вам просто предложу другой метод обработки файлов, я им давно и успешно пользуюсь.

Код

while (<FILE>) {
    # вот эта команда пропускает текущую строку, и сразу переходит к следующей.
    next if /starting/gi;
    ...
}

вообще оператор next очень удобен в таких случаях.
я им пользуюсь в начале таких циклов для пропуска пустых строк и коментариев.

Код

while (<FILE>) {
    next if /^\s*$/;
    next if /^#/;
    ...
}


В вашем случае можно применить еще такую конструкцию, если всеже нужна какая то обработка строки:
Код

while (<FILE>) {
    # вот эта команда пропускает текущую строку, и сразу переходит к следующей.
    if (/starting/gi) {
        # что-то делаем со строкой
        ...
        # переходим к следующей
        next
    }
    # А здесь остальные обработчики лога многострадального :)
    ...
}




--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
Romikgy
Дата 11.9.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Bulat @  11.9.2006,  13:37 Найти цитируемый пост)
точно так, может что-то в синтаксисе недопечатал?

это вопрос или утверждение ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ivan Kolesnikov
Дата 11.9.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

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



Bulat, помоему сдесь все дело в модефикаторе g в regexp, при этом модификаторе запоминается позиция где закончился поиск, и при следующей проверки начинается с этой позиции.
Вот пример:
Код

my $str = 'abcd';

print(($str =~ /b/g && $str =~ /a/g ? 'yes' : 'no') . "\n");
print(($str =~ /b/ && $str =~ /a/ ? 'yes' : 'no') . "\n");


Вывод его
Код

c:\Temp>perl test.pl
no
yes

Сдесь легко увидеть, что 1-й результат ложный, так как после первого поиска позиция была на конце файла и когда начала искаться буква "a" она не была найдена. Второй поиск работает правильно, так как ищется каждый раз во всей строке.

Вообще модификатор g обычно используют в цикле, например
Код

my $str = 'abcd12dff34dfds343';

while ($str =~ /(\d+)/g) {
  print "$1\n";
};


Это сообщение отредактировал(а) Ivan Kolesnikov - 11.9.2006, 15:09
--------------------
PM MAIL ICQ   Вверх
Bulat
Дата 11.9.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Ivan Kolesnikov, плюсег, однозначно, пришел->прочитал->исправил  smile 
Nab, сенкс если не забуду, буду использовать
Romikgy, ругается и очень сильно на такой "тройной иф"  smile 


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


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

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


 




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


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

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