Автор Тема: вырезать слово из текста и вывести его на экран  (Прочитано 4367 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Привет знатоки!

Не могу решить такую задачку:

$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 что-то тоговато.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
m#^stat(?:us|e):\\s+(.+?)$#mi

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
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.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
while и g в регулярном выражении.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
а еще проще сразу распарзить весь текст

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
arto
да безусловно, только если знать как, может быть вы подскажете примерный алгоритм?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
while (m#^(\\w+):\\s+(.+?)\\s*$#mg) {
     $hash{$1} .= $2;
}

по желанию поставить проверку на дублированность ключа.

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
arto
спасибо, идею понял.
теперь думаю что справлюсь сам.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28