以下为本篇文章全部内容:
在一些项目里面我们会用到分词,虽然php有自带的分割函数,但是使用过的朋友都知道对中文的支持是很差的,在处理字符串分割成数组的时候我们有很多种方法,我下面就给大家几种方法的例子,希望能帮到各位有需要的朋友。每一种方法我都会附上结果给大家看看是否符合自己需要的需求。
第一种方法:支持中英文混合,并且支持标点符号分割
<?php
// +----------------------------------------------------------------------
// | Sphynx php将字符串分割成数组实现中文分词
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://www.sunnyos.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Sphynx <admin@sunnyos.com> QQ327388905
// +----------------------------------------------------------------------
/*
*+----------------------------------------------------------------------
* php将字符串分割成数组实现中文分词
* String $string 需要拆分的字符串
* String $code 字符串的编码
* return Array 分割之后的数组
*+----------------------------------------------------------------------
*/
function math($string,$code ='UTF-8'){
if ($code == 'UTF-8') {
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
} else {
$pa = "/[\x01-\x7f]|[\xa1-\xff][\xa1-\xff]/";
}
preg_match_all($pa, $string, $t_string);
$math="";
foreach($t_string[0] as $k=>$s){
$math[]=$s;
}
return $math;
}
$str = "sunny个人技术博客欢迎您,这里只提供原创博文,杜绝复制粘贴的垃圾博文。";
echo "<pre>";
print_r(math($str));以上代码效果:

第二种方法:效果和第一种方法一样
<?php
//直接使用正则的方式,不过编码问题的话没有第一种实用
$str = "sunny个人技术博客欢迎您,这里只提供原创博文,杜绝复制粘贴的垃圾博文。";
preg_match_all("/./u", $str, $arr);
print_r($arr);以上代码效果:

第三种方法:此方法过滤了英文和标点符号,也就是说仅分割中文汉字
<?php
//直接使用正则的方式,不过编码问题的话没有第一种实用
$str = "sunny个人技术博客欢迎您,这里只提供原创博文,杜绝复制粘贴的垃圾博文。";
preg_match_all('/[\x{4e00}-\x{9fa5}]/u',$str,$arr);
print_r($arr);以上代码效果:

如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群
当然啦,上面的只是几个少数方法,还会有更多的方法支持的,或者谁知道的可以加我qq交流一下。
扫二维码快速加群:

总赞数量:18276
总踩数量:128089
文章数量:29