Forum Webscript.Ru
Программирование => Perl => Тема начата: sickboy от 22 Августа 2006, 20:16:26
-
Привет знатоки!
Не могу решить такую задачку:
$s = whois (\'ya.ru\');
содержимое $s:
% By submitting a query to RIPN\'s Whois Service
% you agree to abide by the following terms of use:
% [url]http://www.ripn.net/about/servpol.html#3.2[/url] (in Russian)
% [url]http://www.ripn.net/about/en/servpol.html#3.2[/url] (in English).
domain: YA.RU
type: CORPORATE
nserver: ns.ispm.ru.
nserver: ns1.yandex.ru.
nserver: ns2.yandex.ru.
nserver: ns3.yandex.ru.
state: REGISTERED, DELEGATED
org: YANDEX, LLC.
phone: +7 495 9743555
fax-no: +7 495 9743565
e-mail: [email]noc@yandex.net[/email]
registrar: RUCENTER-REG-RIPN
created: 1999.07.12
paid-till: 2007.08.01
source: TC-RIPN
Last updated on 2006.08.22 20:03:13 MSK/MSD
вот как из всего этого хлама вырезать значение нужно мне строк:
причем название полей может меняться, например для статуса:
/stat[us|e]:\\s?.*/i
додумался только как это сделать в шелле,
$ whois ya.ru|awk -F \': \' \'/state/ {print "Статус:" $2}\'
а в Perl что-то тоговато.
-
m#^stat(?:us|e):\\s+(.+?)$#mi
-
arto
Спасибо, использую пока так:
if ($s =~ /^state:\\s+(.+?)$/mi) {
$status = $1;
$status =~ s/^\\s+//;
$status =~ s/\\s+$//;
print "status: $status\\n";
}
получаю:
status: REGISTERED, DELEGATED
но тут возникае проблемка с NS, т.к. таких полей несколько:
добавил:
if ($s =~ /^nserver:\\s+(.+?)$/mi) {
$ns = $1;
$ns =~ s/^\\s+//;
$ns =~ s/\\s+$//;
print "Name server: $ns\\n";
}
но из ответа whois получаю только первую запись об NS:
status: REGISTERED, DELEGATED
Name server: ns.ispm.ru.
-
while и g в регулярном выражении.
-
а еще проще сразу распарзить весь текст
-
arto
да безусловно, только если знать как, может быть вы подскажете примерный алгоритм?
-
while (m#^(\\w+):\\s+(.+?)\\s*$#mg) {
$hash{$1} .= $2;
}
по желанию поставить проверку на дублированность ключа.
-
arto
спасибо, идею понял.
теперь думаю что справлюсь сам.