Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Регулярн выражен

9.3K
18 июля 2005 года
SpiderX
14 / / 03.05.2005
Привет =)
Такая вообщем тема:

Есть прога на PERL которая соединяется с сервером и получает от него данные.
-------------------------------------------
HTTP/1.0 200 OK
Date: Mon, 18 Jul 2005 14:35:39 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 rus/PL30.19
RemovedHdr: close
Content-Type: text/html; charset=koi8-r
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Last-Modified: Mon, 18 Jul 1985 14:35:39 GMT

Error ...
--------------------------------------------
Эти данные мне надо обработать!
Вот кусочек проги:
---------------------------------------------
if (/Error\.\.\./){
print $_;}
else {
print "It's okey";
}
----------------------------------------------
Но фишка в том что фильтр сравнивает Error с каждой строчкой заголовка и тела => будет

It's okey
It's okey
It's okey
It's okey
It's okey
It's okey
It's okey
It's okey
Error ...

как сделать так чтоб регулярное выражение сравнивалось только с телом ответа сервера т.е. сравнивалось только с Error ... а други строки пропускало?

Т.е мне нужно сделать так чтоб моя прога выводила на экран либо Error ... либо It's okey!

Спасибо!
13K
19 июля 2005 года
eldar
1 / / 19.07.2005
$/ = '';
if(/Error\.{3}/){
print 'Error...';
} else {
print 'It\'s ok';
}
$/ = "\n";
300
19 июля 2005 года
ReDrum
689 / / 20.04.2000
Гм, а разве в таком "кусочеке проги" есть циклы.
т.е счас поясню.


Код:
#!/usr/bin/perl

use strict;
use warnings;

my $str = <<"";
ERROR
error
eRRor
error again

while ($str =~ /(error)/igox) {
    print $1, "\n";
}


Этот код действительно выводит все совпадения.
тогда как следующий пример - только одно

Код:
#!/usr/bin/perl

use strict;
use warnings;

my $str = <<"";
ERROR
error
eRRor
error again

($str =~ /(error)/i) ? print $1 :  print 'somthing wrong';
9.3K
19 июля 2005 года
SpiderX
14 / / 03.05.2005
Цитата:
Originally posted by ReDrum
Гм, а разве в таком "кусочеке проги" есть циклы.
т.е счас поясню.


Код:
#!/usr/bin/perl

use strict;
use warnings;

my $str = <<"";
ERROR
error
eRRor
error again

while ($str =~ /(error)/igox) {
    print $1, "\n";
}


Этот код действительно выводит все совпадения.
тогда как следующий пример - только одно

Код:
#!/usr/bin/perl

use strict;
use warnings;

my $str = <<"";
ERROR
error
eRRor
error again

($str =~ /(error)/i) ? print $1 :  print 'somthing wrong';



Ты понимаешь в чем фишка?

В твоем варианте он впервые наталкнувшись на Error выдает ERROR, но в моем случае когда отвечает сервер error идет предпоследним =>
он на все строки отвечает так как дано в else и лишь потом попав на error отвечает как дано в if т.е. пишет ERROR!
Ваши варианты не подходят!
Уже попробовал тоже самое что и было сначала!

8.7K
19 июля 2005 года
XXXX Pro
47 / / 20.06.2005
Так сделай проще: отдели заголовок от тела и все.
Примерно вот так (будет работать, если в теле нет последовательности из двух \n подряд):
list($header,$body)=split(/\n\n/,$_); // если ответ сервера у тебя в ;_
if ($body=~/Error\.\.\./){
print $body;}
else {
print "It's okey";
}
9.3K
22 июля 2005 года
SpiderX
14 / / 03.05.2005
Цитата:
Originally posted by XXXX Pro
Так сделай проще: отдели заголовок от тела и все.
Примерно вот так (будет работать, если в теле нет последовательности из двух \n подряд):
list($header,$body)=split(/\n\n/,$_); // если ответ сервера у тебя в ;_
if ($body=~/Error\.\.\./){
print $body;}
else {
print "It's okey";
}



Спасибо.

Та на самом деле строка разделяющая хеад и боди имеет такой вид \r\n !

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог