新手求教字符串截取的问题!

leifengyao 2011-05-31 09:51:12
一个IP的文件,每行的格式如下:
0.0.0.1 0.0.0.6 xxx网络 xxxx地方
要存到数据库中,首先想到的是把所有的空格都化成一个空格,再用空格分割。可是后来发现有的记录最后一个XXXX地方里面也有一个空格。不知道怎么办了。我是新手,大家帮帮忙啊, 不胜感激。
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leifengyao 2011-06-01
  • 打赏
  • 举报
回复
问题已解决 谢谢各位。
ImN1 2011-05-31
  • 打赏
  • 举报
回复
貌似纯真IP导出的数据
如果第三列没有空格

$str='4.19.79.0 4.19.79.63 美国 Armed Forces Radio/Television';
preg_match_all("/^([\d\.]+) +([\d\.]+) +([^ ]+) +(.+)$/",$str,$match);
var_dump($match);
xuzuning 2011-05-31
  • 打赏
  • 举报
回复
function foo($v) {
$t = split("[ \t]+", trim($c));
return "('". join("','", $t) ."')";
}

$ar = array_map('foo', file('你的数据文件名'));

$sql = 'insert into ip_table (sip, eip, net, addr) values ' . join(',', $ar);


www_7di_net 2011-05-31
  • 打赏
  • 举报
回复
试试这个

$a="0.0.0.1 0.0.0.6 xxx网络 xxxx地方 ";
//把左右兩側的空格和\t過濾掉
$a=Trim($a," ");
//把內部所有的空格和\t替換成|
$a=Strtr($a,Array(" "=>"|"," "=>"|"));
//把連續的雙||替換成一個
$a=Strtr($a,Array("||"=>"|");

//用|拆分
$b=Explode("|",$a);

Echo $b[0],'<br>';
Echo $b[1],'<br>';
Echo $b[2],'<br>';
Echo $b[3],'<br>';
乌镇程序员 2011-05-31
  • 打赏
  • 举报
回复
比较棘手啊,我只能想到下面一个笨办法了。
$str = '0.0.0.1   0.0.0.6   xxx网络 xxxx地方';
$str = preg_replace('/[ ]{2,}/',' ',$str);
$ar = explode(' ',$str);
if (count($ar) > 4) $str[strripos($str,' ')] = '';
$ar = explode(' ', $str);
print_r($ar);
leifengyao 2011-05-31
  • 打赏
  • 举报
回复
谢谢各位。
andyxl,可是空格是在中间啊。
snmr_com 试了一下 好像不是\t啊,呵呵。
还有长两个角的大哥,用了你的方法,可是又有一个问题,有的记录 “xxxx地方”并没有空格,而且“xxx网络”和“xxxx地方”之间只有一个空格,就出问题了。

ImN1 2011-05-31
  • 打赏
  • 举报
回复
我觉得中间分割的多数不是空格而是\t,检查一下你的文件
如果是\t的话,按csv导入数据库更好
乌镇程序员 2011-05-31
  • 打赏
  • 举报
回复
//适用于xxxx地方部分中间有一个空格的情况
$str = '0.0.0.1 0.0.0.6 xxx网络 xxxx 地方';
$str[strripos($str,' ')] = '';

$str = preg_replace('/[ ]{2,}/',' ',$str);
$ar = explode(' ',$str);
print_r($ar);
andyxl 2011-05-31
  • 打赏
  • 举报
回复
那你先把“0.0.0.1 0.0.0.6 xxx网络 xxxx地方”这串东西,去除右边空格,再做你的操作。rtrim

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧