在PHP中,一個字串比如“xxx_xxxx_10.136.132.61_xxxxxxxx_xxxxxx”,怎麼得到其中的“10.136.132.61”這一部分呢。
因為IP地址長短不一,所以我一開始想的substr是不適用的。如果尋找“_”的位置的話,因為IP前後都有兩個“_”,所以也不行。
除了IP地址長度不確定,其他的長度是確定的,格式也是確定的,都是“xxx_xxxx_IP地址_xxxxxxxx_xxxxxx”這個格式,x表示一個字元
謝謝大家協助!
回複內容:
在PHP中,一個字串比如“xxx_xxxx_10.136.132.61_xxxxxxxx_xxxxxx”,怎麼得到其中的“10.136.132.61”這一部分呢。
因為IP地址長短不一,所以我一開始想的substr是不適用的。如果尋找“_”的位置的話,因為IP前後都有兩個“_”,所以也不行。
除了IP地址長度不確定,其他的長度是確定的,格式也是確定的,都是“xxx_xxxx_IP地址_xxxxxxxx_xxxxxx”這個格式,x表示一個字元
謝謝大家協助!
如果你能確定其他字串沒有類IP的格式的話才可以匹配
$str = 'xxx_xxxx_10.136.132.61_xxxxxxxx_xxxxxx';$patten = '(/25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}/';preg_match($patten,$str,$result);var_dump($result);$ip = $result[0];
不懂php,不過這個問題可以回答下,一,正則匹配。二,字串切割,切個頭切個尾。
用正則吧
$data = 'xxx_xxxx_10.136.132.61_xxxxxxxx_xxxxxx';$preg = '/[\d\.]+/i';preg_match($preg, $data, $matches);var_dump($matches);
explode函數搞定
$str = 'xxx_xxxx_10.136.132.61_xxxxxxxx_xxxxxx';$arr = explode('_', $str);print_r($arr);
我自問自答一下,可以用substr($str,9,-16)
explode('_', $str)[2]
用正則可以非常靈活,而用explode,或者substr,都是投機取巧。3L是正解
支援explode,簡單省事,反正格式已固定