3 回答
TA贡献2036条经验 获得超8个赞
很有意思的问题.
研究了一个多小时,终于找到了一个解决方案.
测试发现,preg_split对中文(多字节)的分隔符处理可能真的存在问题.
原因可能是正则匹配时不能正常分隔一个多字节字符(猜测).
但我实验用半角(英文)的分隔符就工作得很好.
于是
我在处理待分隔的文本前先对文本进行替换,把中文的句点和逗号都替换成英文半角的.然后再使用preg_split,暂时发现工作得不错.
以下是我的测试代码.
<?php
$test = <<<EOF
记者从有关人士处获悉,嫦娥二号发射的各项准备工作全部就绪,昨日经专家组评审,卫星、火箭、发射场、测控等系统均情况正常,具备发射条件。今天起,西昌卫星发射中心的加注手将为火箭加注燃料。
据一位航天专家介绍,因为地球和月球都在转动的缘故,所以地月之间的最佳交汇点每年仅出现3次,而这3次便是发射探月卫星的最佳节点,经过观测,今年3次的出现时间分别为10月1日、10月2日和10月3日,而最佳发射窗口则是1日晚7时,2日晚8时和3日晚10时,其中国庆日晚7时为佳中之佳。
针对媒体称10月1日发射窗口时间为晚6时59分57秒,该专家告诉本报记者,早3秒并非提前3秒发射,而是将这3秒时间预留出来,作为现场指挥员在发送倒计时口令的缓冲时间。(记者万强)
EOF;
//$input = $_POST[$content]; //........................获取要分割的字符串
$test = str_replace(",",',',$test);
$test = str_replace("。",'.',$test);
$mode="/[,|.]/s"; //......................用“逗号” 和 “句号” 分割字符串
$output = preg_split($mode,$test,-1);
print_r($output);
?>
============
楼主不防试试,我的代码是gb2312的字串.
经测试在,字符串为UTF8时,也可以正常工作.
TA贡献1780条经验 获得超3个赞
//split是正则方法分割字符,正确的写法应是这样。
$a = split("\.","1.2.3");
echo $a[0];
//用字符分割应是用explode
$a = explode(".","1.2.3");
echo $a[0];
TA贡献1951条经验 获得超3个赞
//split是正则方法分割字符,正确的写法应是这样。
$a = split("\.","1.2.3");
echo $a[0];
//用字符分割应是用explode
$a = explode(".","1.2.3");
echo $a[0];
preg_split() 函数使用了 Perl 兼容正则表达式语法,通常是比PHP函数split()更快的替代方案。如果不需要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费。
本函数返回一个字符串数组,每个单元为 string 经区分大小写的正则表达式 pattern 作为边界分割出的子串。如果设定了 limit,则返回的数组最多包含 limit 个单元,而其中最后一个单元包含了 string 中剩余的所有部分。如果出错,则 split() 返回 FALSE。
将 /etc/passwd 中的前四个字段分割出来:
- 3 回答
- 0 关注
- 596 浏览
添加回答
举报