2016-01-23 123 views
0

str_replace没有找到字符串,而是像它应该那样替换。str_replace不能正常工作php

这是通过回声

eth0 192.168.1.1/24 u/u Local eth0.51 192.168.5.1/24 u/u Dev 1 eth1 x.x.x.x/24 u/u Internet eth2 192.168.2.1/24 u/D Local 2 lo 127.0.0.1/8 u/u ::1/128 tun35 192.168.4.222/24 u/u 

这里输出的$数据串是我的代码

$ssh = new Net_SSH2("$routerip"); 
    if (!$ssh->login("$username", "$password")) { 
    return $radioip["error"] ='router error'; 
    } 

$data = $ssh->exec("/opt/vyatta/bin/vyatta-op-cmd-wrapper show interfaces"); 

$string = 'eth'; 

$datastart = strpos($data,$string); 
$datastart = $datastart -1; 

$pattern ='lo 127.0.0.1/8 u/u ::1/128'; 
$replace = ''; 
echo "$pattern"; 
$data = substr($data,$datastart); 
$data = str_replace($pattern,$replace, $data); 
echo "$data"; 

编辑

这是$ SUBSTR

Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 192.168.1.1/24 u/u Local eth0.51 192.168.5.1/24 u/u Dev 1 eth1 x.x.x.x/24 u/u Internet eth2 192.168.2.1/24 u/D Local 2 lo 127.0.0.1/8 u/u ::1/128 tun35 192.168.4.222/24 u/u 

回答

0
前数据

问题在于线

$datastart = $datastart -1; 

如果$datastart为0(如eth是在字符串的开头是你的情况如此),那么$datastart -1;使得$datastart等于-1

哪些情况会影响$data = substr($data,$datastart);,因为负偏移会将$data字符串更改为仅u。你绝对没有你的$pattern

我认为simpliest方式将是检查是否$datastart小于0,并将其设置为零:

$datastart = strpos($data,$string); 
if ($datastart < 0) { 
    $datastart = 0; 
} 
+0

请重新审视作为$数据是 – user1956768

+0

你的代码工作正常,这些线路的不同 - HTTPS:/ /3v4l.org/so2RL –

+0

它的工作。我正在使用缺少所有额外空格的搜索字符串 – user1956768