PHP 正则匹配汉字的正确姿势

一直以来,正则匹配汉字都是个坑,网上搜索出来的 Unicode码段匹配都不怎么好用。前几天在一个技术群里,看到了一个大牛给出了个不错的解决方案。

下面是我Get到的新技能:

/\p{Han}/u

以前从来没见过这样的正则(原谅我的无知吧)。\p{Han} 代表汉语(中文字符),u模式修饰符表示被匹配的字符串是utf-8的(传说中的开启Unicode模式?)。这个正则只适合于 “开启Unicode模式的PHP” 和 “1.9以上版本Ruby” 。

实践出真知:

<?php
    $value="迷麟--灵山王";
    preg_match('/^(\p{Han}){2}/u', $value, $result);
    print_r($result);
?>

输出为:

Array
(
    [0] => 迷麟
    [1] => 麟
)

参考资料:
正则表达式:Unicode诸问题:http://www.infoq.com/cn/news/2011/03/regular-expressions-unicode-2
模式修饰符:http://php.net/manual/zh/reference.pcre.pattern.modifiers.php

欢迎大家学习交流。