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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему срабатывает не так, помогите с регуляркой 
:(
    Опции темы
burakov
Дата 14.10.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день

нужно составить регулярное выражение.
Код

use strict;
use warnings;

my $str = 'http://bmw-autocats.ru/parts/E81/3-doors/Europe/116d-N47/2008/november/browse/';
my $pattern = '[^2008]';

if ($str =~ /$pattern/) {
    print 'ok' ."\n";
}


Почему мне пишет "ОК". то есть пропускает данную ссылку, хотя четко указано, что с цифрой 2008
ссылок не пропускать?

Спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ginnie
Дата 14.10.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Уважаемый burakov, Ваше регулярное выражение срабатывает для любых символов, кроме 0, 2 и 8. Вам надо $str !~ /2008/

Это сообщение отредактировал(а) ginnie - 14.10.2011, 11:38


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


Опытный
**


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

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



Я не могу проверить 
ссылку на !~ 
потому что регулярное выражение -  это шаблон для грабера, который проверяет только 
=~

возможно ли как то составить регулярное выражение так, чтобы 
оно (проверяемое как ) =~ 

фильтровало (убирало, не пропускало) 
урлы, там где есть год (к примеру 2008, 2009)...

Спасибо, за помощь



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
alezzz
Дата 14.10.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



подобные проблемы уже обсуждались, используйте просмотр вперед:
Код

my $str = 'http://bmw-autocats.ru/parts/E81/3-doors/Europe/116d-N47/2008/november/browse/';
my $pattern = '2008';

print 'ok' if $str =~ /^(?:(?!$pattern).)+$/;


но это вас не спасет если в урл появится 2008 не в том месте где вы его ждете

Это сообщение отредактировал(а) alezzz - 14.10.2011, 12:53
PM MAIL   Вверх
Pfailed
Дата 14.10.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

/(?:(2008)|($))(*COMMIT)(?(1)(*FAIL))/


Добавлено через 7 минут и 43 секунды
Цитата(alezzz @  14.10.2011,  12:52 Найти цитируемый пост)
но это вас не спасет если в урл появится 2008 не в том месте где вы его ждете

Поясните пожалуйста. По моему ваше выражение сработает для 2008 в любом месте.



--------------------
PM MAIL   Вверх
alezzz
Дата 14.10.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Цитата(Pfailed @  14.10.2011,  13:10 Найти цитируемый пост)
Поясните пожалуйста. По моему ваше выражение сработает для 2008 в любом месте.

Я про другое, вдруг появится bmw модели E2008 smile. Более точно нужно было написать $pattern = '\/2008\/', это предостережение что паттерн не точный и на практике может не всегда работать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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