分开字符串

总哈哈 2009-11-17 11:50:38
2,"35205702,2505907","0","15","0",125,2678,2009-10-12 13:49:00,2009-11-13 14:54:00,2009-10-13 02:45:00
把上面的字符串以(,)分开,但是如果有“则表示,是子字符串里面的,则不分开,
那么上面的字符串最后分开后是
2 "35205702,2505907" "0" "15" "0" 125 2678 2009-10-12 13:49:00 2009-11-13 14:54:00 2009-10-13 02:45:00

不管你用正则,还是其它方法,只要能分开就是好方法
当然,请不要为了分开这玩意,写一页代码。
...全文
167 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LuciferStar 2009-11-19
  • 打赏
  • 举报
回复
不好意思看错题。
那就直接检测“","”,用这个拆分好了。
总哈哈 2009-11-18
  • 打赏
  • 举报
回复
非常感谢各位高手参考!来晚了点,现在给分。
总哈哈 2009-11-17
  • 打赏
  • 举报
回复
请仔细读题,谢谢
LuciferStar 2009-11-17
  • 打赏
  • 举报
回复
手册中:
<?php
$str = 'one|two|three|four';

// positive limit
print_r(explode('|', $str, 2));

// negative limit (since PHP 5.1)
print_r(explode('|', $str, -1));
?>
江南昆虫 2009-11-17
  • 打赏
  • 举报
回复

<pre>
<?php
$str = '2,"35205702,2505907","0","15","0",125,2678,2009-10-12 13:49:00,2009-11-13 14:54:00,2009-10-13 02:45:00';
preg_match_all('/(?<=^|,)("?)[^"]*\\1(?=,|$)/U',$str,$out);
print_r($out[0]);
?>
</pre>
dzxccsu 2009-11-17
  • 打赏
  • 举报
回复
学习!
jlzan1314 2009-11-17
  • 打赏
  • 举报
回复
楼上的聪明过人

fgetcsv -- 从文件指针中读入一行并解析 CSV 字段
说明
array fgetcsv ( int handle [, int length [, string delimiter [, string enclosure]]] )




handle
一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。

length (可选)
必须大于 CVS 文件内最长的一行。在 PHP 5 中该参数是可选的。如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。

delimiter (可选)
设置字段分界符(只允许一个字符),默认值为逗号。

enclosure (可选)
设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在 PHP 4.3.0 中添加的。


和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。

fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。


原来分隔符也可以自定义..
fgetcsv 会对""里面的值做为字符串处理,所以分割不受影响,谢谢,我也学到了一些东西.谢谢了
foolbirdflyfirst 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuzuning 的回复:]
PHP code$text=<<< TEXT2,"35205702,2505907","0","15","0",125,2678,2009-10-1213:49:00,2009-11-1314:54:00,2009-10-1302:45:00
TEXT;preg_match_all('/(".+"|.+)(?:,|$)/U',$text,$r);echojoin('',$r[1]);
2 "35205702,2505907" "0" "15" "0" 125 2678 2009-10-12 13:49:00 2009-11-13 14:54:00 2009-10-13 02:45:00

我觉得这种串一般不会出现在程序代码中,而存在于文件中。
因此实用的写法是用fgetcsv函数读取。模拟代码如下
PHP code$text=<<< TEXT2,"35205702,2505907","0","15","0",125,2678,2009-10-1213:49:00,2009-11-1314:54:00,2009-10-1302:45:00
TEXT;$fp=tmpfile();fwrite($fp,$text);fseek($fp,0);$ar=fgetcsv($fp);print_r($ar);
Array
(
    [0] => 2
    [1] => 35205702,2505907
    [2] => 0
    [3] => 15
    [4] => 0
    [5] => 125
    [6] => 2678
    [7] => 2009-10-12 13:49:00
    [8] => 2009-11-13 14:54:00
    [9] => 2009-10-13 02:45:00
)

[/Quote]
codeyell-com 2009-11-17
  • 打赏
  • 举报
回复
为什么都要用一样的逗号?
引号里面用逗号
引号外面用 |
xuzuning 2009-11-17
  • 打赏
  • 举报
回复
$text = <<< TEXT
2,"35205702,2505907","0","15","0",125,2678,2009-10-12 13:49:00,2009-11-13 14:54:00,2009-10-13 02:45:00
TEXT;
preg_match_all('/(".+"|.+)(?:,|$)/U', $text, $r);
echo join(' ', $r[1]);

2 "35205702,2505907" "0" "15" "0" 125 2678 2009-10-12 13:49:00 2009-11-13 14:54:00 2009-10-13 02:45:00

我觉得这种串一般不会出现在程序代码中,而存在于文件中。
因此实用的写法是用fgetcsv函数读取。模拟代码如下
$text = <<< TEXT
2,"35205702,2505907","0","15","0",125,2678,2009-10-12 13:49:00,2009-11-13 14:54:00,2009-10-13 02:45:00
TEXT;

$fp = tmpfile();
fwrite($fp, $text);
fseek($fp, 0);

$ar = fgetcsv($fp);
print_r($ar);

Array
(
[0] => 2
[1] => 35205702,2505907
[2] => 0
[3] => 15
[4] => 0
[5] => 125
[6] => 2678
[7] => 2009-10-12 13:49:00
[8] => 2009-11-13 14:54:00
[9] => 2009-10-13 02:45:00
)
littlebirds 2009-11-17
  • 打赏
  • 举报
回复
preg_replace
程序猿之殇 2009-11-17
  • 打赏
  • 举报
回复
$str=<<<STR
2,"35205702,2505907","0","15","0",125,2678,2009-10-12 13:49:00,2009-11-13 14:54:00,2009-10-13 02:45:00
STR;
$str = preg_replace("/(\"[^\"]+)(,)([^\"]+)\"/", "\\1$\\3", $str);
$str = str_replace(",", " ", $str);
echo str_replace("$", ",", $str);

思路就是先用正则,将""号里的逗号转成其它的字符,等替换或者分割以后再转回来.
总哈哈 2009-11-17
  • 打赏
  • 举报
回复
没有高手过来看看吗?

21,886

社区成员

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

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