#!/usr/bin/perl
use strict;
use warnings;
my $str = <<"";
ERROR
error
eRRor
error again
while ($str =~ /(error)/igox) {
print $1, "\n";
}
Регулярн выражен
Такая вообщем тема:
Есть прога на 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!
Спасибо!
if(/Error\.{3}/){
print 'Error...';
} else {
print 'It\'s ok';
}
$/ = "\n";
т.е счас поясню.
Код:
Этот код действительно выводит все совпадения.
тогда как следующий пример - только одно
Код:
#!/usr/bin/perl
use strict;
use warnings;
my $str = <<"";
ERROR
error
eRRor
error again
($str =~ /(error)/i) ? print $1 : print 'somthing wrong';
use strict;
use warnings;
my $str = <<"";
ERROR
error
eRRor
error again
($str =~ /(error)/i) ? print $1 : print 'somthing wrong';
Цитата:
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";
}
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';
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!
Ваши варианты не подходят!
Уже попробовал тоже самое что и было сначала!
Примерно вот так (будет работать, если в теле нет последовательности из двух \n подряд):
list($header,$body)=split(/\n\n/,$_); // если ответ сервера у тебя в ;_
if ($body=~/Error\.\.\./){
print $body;}
else {
print "It's okey";
}
Цитата:
Originally posted by XXXX Pro
Так сделай проще: отдели заголовок от тела и все.
Примерно вот так (будет работать, если в теле нет последовательности из двух \n подряд):
list($header,$body)=split(/\n\n/,$_); // если ответ сервера у тебя в ;_
if ($body=~/Error\.\.\./){
print $body;}
else {
print "It's okey";
}
Так сделай проще: отдели заголовок от тела и все.
Примерно вот так (будет работать, если в теле нет последовательности из двух \n подряд):
list($header,$body)=split(/\n\n/,$_); // если ответ сервера у тебя в ;_
if ($body=~/Error\.\.\./){
print $body;}
else {
print "It's okey";
}
Спасибо.
Та на самом деле строка разделяющая хеад и боди имеет такой вид \r\n !