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不管你用正则,还是其它方法,只要能分开就是好方法
当然,请不要为了分开这玩意,写一页代码。
把上面的字符串以(,)分开,但是如果有“则表示,是子字符串里面的,则不分开,
那么上面的字符串最后分开后是
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不管你用正则,还是其它方法,只要能分开就是好方法
当然,请不要为了分开这玩意,写一页代码。
解决方案 »
- nginx+php5.3.20下,file_get_contents无法使用,求助
- 本地装Discuz没问题,服务器装Discuz老是报: Access denied
- curl和file_get_contents 都无法取得源代码
- PHP俱乐部
- 找php开发 两年以上经验 上海
- 用PHP程序访问一个网页的几个问题。
- 编码转换问题
- 谁能给我解释一下下面的代码(200),答完全者给200分!!
- 各位好,请问怎样表存储在ORACLE中(字段类型为BLOB)的EXCEL文件内容取出?急。。。
- php如何进入页面就执行函数。。
- php文件能否被别人盗取??
- 帮忙看一下是哪出错了,浮动广告滚动不了!急!!!!
<?php
$str = 'one|two|three|four';// positive limit
print_r(explode('|', $str, 2));// negative limit (since PHP 5.1)
print_r(explode('|', $str, -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
STR;
$str = preg_replace("/(\"[^\"]+)(,)([^\"]+)\"/", "\\1$\\3", $str);
$str = str_replace(",", " ", $str);
echo str_replace("$", ",", $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
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
)
说明
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 会对""里面的值做为字符串处理,所以分割不受影响,谢谢,我也学到了一些东西.谢谢了
<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>