文字列インターセプト
bri=bridge0 if1=wan if2=lan if3=vlan mac=00:11:22:1d:2d:3d ip=192.168.100.1 netmask=255.255.255.0 arp=arp state=stop
bri=bridge1 if1=wan mac=00:01:2B:4C:6D:9F ip=192.168.1.125 netmask=255.255.255.0 state=stop
これは私が保存した設定ファイルです
ただし、if で始まるものは複数選択で、番号は 8 まで固定されていません。if
つまり
bridge0: wan lan vlan
bridge1: wan の値を取り出したいのです。
this 配列に変換したデータは
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->Array ( [0] => Array ( [bri] => bridge0 [if1] => wan [if2] => lan [if3] => vlan [mac] => 00:11:22:1d:2d:3d [ip] => 192.168.100.1 [netmask] => 255.255.255.0 [arp] => arp [state] => stop ) [1] => Array ( [bri] => bridge1 [if1] => wan [mac] => 00:01:2B:4C:6D:9F [ip] => 192.168.1.125 [netmask] => 255.255.255.0 [state] => stop ) )
$s = "bri=bridge0 if1=wan if2=lan if3=vlan mac=00:11:22:1d:2d:3d ip=192.168.100.1 netmask=255.255.255.0 arp=arp state=stop"; parse_str(strtr($s, ' ', '&'), $a); print_r($a); <br><font color="#e78608">------解決策------------------</font><br> if で始まるキーを調べるだけではないでしょうか?<br><br>
[ユーザー:root 時刻:17:19:16 パス:/home/liangdong/php]$ php preg.php ブリッジ0:ワンランブラン ブリッジ1:ワン [ユーザー:root 時刻:17:19:16 パス:/home/liangdong/php]$ cat preg.php <?php $str = <<<EOF bri=ブリッジ0 if1=wan if2=lan if3=vlan mac=00:11:22:1d:2d:3d ip=192.168.100.1 ネットマスク=255.255.255.0 arp=arp state=stop bri=ブリッジ1 if1=wan mac=00:01:2B:4C:6D:9F ip=192.168.1.125 ネットマスク=255.255.255.0 状態=停止 EOF; $rows =explode(PHP_EOL, $str); foreach ($rows as $row) { $cols = preg_split('/s+/', $row); $line =explode('=', $cols[0])[1] ":"; foreach ($cols as $col) { $fields =explode('=', $col); if (strncmp($fields[0], "if", 2) === 0) { $line .= " " . $fields[1]; } } echo $line .PHP_EOL; } ?><div class="clear"></div>