[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсинг
tranger
Нужно спарсить текст такого вида:
1: vlan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global vlan1
2: vlan2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.1/24 scope global vlan2
valid_lft forever preferred_lft forever
3: ifb0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc htb state UNKNOWN qlen 32
link/ether 9a:3b:4b:91:71:e8 brd ff:ff:ff:ff:ff:ff
...


и получить отдельные фрагменты:
1: vlan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global vlan1

и т.д.

Использую preg_matсh_all
Написал такой шаблон:
preg_match_all("/\W(\d+):\s(.+)\W(\d+):\s/isU", $address, $out);
Работает, но выводит через раз. Например в этом примере 2: vlan2 не выведется.
Я так понимаю это связано с тем, что в шаблоне указано искать от цифра: до цифра: и при следующем поиске пропускается один фрагмент.

Как исправить?
walerus
Вот такой маленький "костыль" пришел в голову...
<?php
$string = '1: vlan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global vlan1
2: vlan2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.1/24 scope global vlan2
valid_lft forever preferred_lft forever
3: ifb0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc htb state UNKNOWN qlen 32
link/ether 9a:3b:4b:91:71:e8 brd ff:ff:ff:ff:ff:ff'
;

$string = preg_replace( "~\n\d:\s~", '||$0', trim( $string ) );
$string = str_replace( "||\n", '||', trim( $string ) );
$string = explode( '||', trim( $string ) );

print_r($string);
Результат
Array
(
[0] => 1: vlan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global vlan1
[1] => 2: vlan2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 1c:c1:de:e7:e5:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.1/24 scope global vlan2
valid_lft forever preferred_lft forever
[2] => 3: ifb0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc htb state UNKNOWN qlen 32
link/ether 9a:3b:4b:91:71:e8 brd ff:ff:ff:ff:ff:ff
)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.