Консультация № 52912
22.08.2006, 16:57
0.00 руб.
0 6 2
Есть строки: ‘asd.html‘, ‘qwesd.png‘, ‘zxcqpnwe.png‘, ‘qazas.jpg‘, ‘png.txt‘
Как написать регулярное выражение, которое бы не пропускало строки, оканчивающиеся на ‘png‘ и ‘jpg‘?
Т.е. для данного примера должны быть пропущены только строки ‘asd.html‘ и ‘png.txt‘.

Обобщённый вопрос: Как в р.в. задавать блоки символов которые НЕ должны встречаться.

Обсуждение

Неизвестный
22.08.2006, 17:24
общий
что вы понимаете под словами "не пропускало"?Если вам надо логически инвертировать результат поиска, то можете вместо =~ использовать !~
Неизвестный
22.08.2006, 17:39
общий
это ответ
Доброе время суток, Tundravarg

вот так:

my $str = q{very_very_long_file.jpg};
unless($str =~ /\.(png|jpg)$/i){
print "файл не графический";
}

можно сделать ещё интереснее - развитая тема :-)

пишем более универсальный вариант

смотри аттач

с уважением, удачи


Приложение:
my @ext = (‘png‘, ‘jpg‘); # здесь описываем все расширения, которые видеть не хотимmy $str = q{very_very_long_file.jpg};my $yes=1;for my $t(@ext){$yes=0 if($str =~/\.($t)$/i);}print "файл прошёл" if($yes);
Неизвестный
22.08.2006, 17:42
общий
это ответ
Здравствуйте, Tundravarg!
Попробуйте так:
$str =~ /*(?!(.png))$/;
и $str =~ /*(?!(.jpg)$/;
Неизвестный
22.08.2006, 18:02
общий
<b>to dianacode</b> :ошибочка у вас в приложении :)надо использовать foreach а не for
Неизвестный
22.08.2006, 23:56
общий
Всем спасибо за предложенные варианты.Странно, но вариант с конструкцией (?!(.png)) почему-то не сработал. Его я пробовал ещё до того, как задал вопрос, правда я писал так: /.*(?!png)$/. Из-за скобок вокруг png?Вариант с инвертирование условия, предложенный Dianacode и -ОС- действительно хорош, хоть и более громоздкий, чем использование (?!). Жаль только, что не записать это одним выражением.Завтра на работе всё попробую.Спасибо.
давно
Руководитель
1
1525
28.08.2006, 03:32
общий
<b>to -OC-</b>Ошибки тут никакой нет;) foreach является синонимом for-а. По сути обе конструкции - одно и тоже. Ключевое слово foreach введено для более "корректного" оформления кода с точки зрения логики и не более;)
Об авторе:
Если не знаешь, что делать - делай шаг вперед.

Форма ответа