Home > Article > Backend Development > 字符串截取,该怎么解决
字符串截取
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
这条数据我转成数组是
<!-- 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> 不就是找哪个key是if开头的吗.<br><br>
[User:root Time:17:19:16 Path:/home/liangdong/php]$ php preg.php bridge0: wan lan vlan bridge1: wan [User:root Time:17:19:16 Path:/home/liangdong/php]$ cat preg.php <?php $str = <<<EOF 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 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>