php正则表达式按字符分割中文文本

时间:2015-02-14 17:36:23

标签: php regex

例如,我在客户请求中有以下字符串:

我学习中国的语言, 国的语言.

我想获得一系列字符,包括空格,逗号,圆点等,所以基本上我需要按照这样的字符细分:

$characters = [
    "我", "学", "习", "中", "国", "的", "语", "言", ",", " ", "国", "的","语","言"
]

我认为我需要使用一些多字节函数,因为中文字符可以占用3个或更多字节。我可以使用什么regexp表达式来获取该数组?

1 个答案:

答案 0 :(得分:3)

使用preg_match_all

preg_match_all('~.~u', $str, $match);

.匹配任何字符,但不匹配换行符。但是,当使用. DOTALL修饰符时,相同的s将匹配任何字符甚至换行符。由于您的输入包含Unicode字符,因此您必须启用u修饰符。

通过preg_split

$str = "我学习中国的语言, 国的语言.";
$split = preg_split('~(?<=.)(?=.)~u', $str);
print_r($split);

示例:

$str = "我学习中国的语言, 国的语言.";
preg_match_all('~.~u', $str, $match);
print_r($match);

<强>输出:

Array
(
    [0] => Array
        (
            [0] => 我
            [1] => 学
            [2] => 习
            [3] => 中
            [4] => 国
            [5] => 的
            [6] => 语
            [7] => 言
            [8] => ,
            [9] =>  
            [10] => 国
            [11] => 的
            [12] => 语
            [13] => 言
            [14] => .
        )

)