Нашёл я нужную опцию, если правильно понял, то конечный вид выражения такой(хотя работает что с этой опцией, что без неё):'/(?m)lease\s+[\d.]+\s+{[^}]+}/'
Если честно читал маны и видел все эти опции не раз, но чтобы собрать их именно в таком порядке...
После решения первого вопроса возникло ещё несколько :) .
Теперь нужно распарсить некоторые строки в каждом элементе массива. Например из такого вот куска
lease 192.168.100.163 {
starts 1 2008/04/28 19:07:36;
ends 4 2008/05/01 19:07:36;
binding state active;
next binding state free;
hardware ethernet 00:1d:60:76:32:db;
uid "\001\000\035`v2\333";
client-hostname "philka";
}
нужно вынуть три строки, а именно:
1 lease 192.168.100.163 {
2 hardware ethernet 00:1d:60:76:32:db;
3 client-hostname "philka";
при чём на выходе по каждой строке должно получиться следующее:
1 192.168.100.163
2 00:1d:60:76:32:db
3 philka
Для чего это нужно? Эти данные будут загоняться в хтмл-форму <select> после этого будут пересылаться другому скрипту на выполнение.
Вот код который допустим вынимает ип-адрес:
$dhcp_file = implode( "", file( "dhcpd/dhcpd.leases" ) );
preg_match_all( '/lease\s+[\d.]+\s+{[^}]+}/', $dhcp_file, $out_main );
print ( "<select name=dhcp_ip_select>\n" );
print ( "<option value=\"-1\">\n" );
foreach ( $out_main as $out_main_lvl1 )
{
foreach ( $out_main_lvl1 as $out_main_lvl2 )
{
preg_match_all( '/lease\s+[\d.]+\s+/', $out_main_lvl2, $out_ip );
foreach ( $out_ip as $out_ip_lvl1 )
{
foreach ( $out_ip_lvl1 as $out_ip_lvl2 )
{
print ( "<option value=".$out_ip_lvl2.">".$out_ip_lvl2."\n" );
}
}
}
}
print ( "</select>\n" );
Недостаток в том что на выходе получаю не только ип-адрес, но весь кусок строки вида "lease 192.168.100.163".
Если поможете правильно описать и эти куски, то буду весьма признателен :).