下面是网上搜索关于正则表达式匹配中文的常见版本。
js /[\u4e00-\u9fa5]+/
php /[\x7f-\xff]+/
今天这里主要是针对php的版本做下扩展,其实,php版本也是能利用js那个版本进行匹配的。
很多人可能已经写过并遇到了这个报错:
Warning: preg_match_all(): Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 2
那么,我们要怎么解决呢?
很简单,就是这样:
/[\x{4e00}-\x{9fa5}]+/u
因此,想要利用php匹配中文,有两种写法:
/[\x7f-\xff]+/
和
/[\x{4e00}-\x{9fa5}]+/u
下面是一段是用php运行正则测试代码的例子,有兴趣的朋友可以看看运行结果(本文由 www.uuhuihui.com 整理):
<?php
//临时启用全局错误提示
ini_set('display_errors', true);
error_reporting(E_ALL);
$linkeBreak = (PHP_SAPI == 'cli') ? "\n" : '<br>';
$str = '中文汉字English';
$patternArr = array(
'/[\u4e00-\u9fa5]+/',
'/[\x{4e00}-\x{9fa5}]+/u',
'/[\x7f-\xff]+/',
);
foreach($patternArr as $pattern) {
echo "Pattern: {$pattern} {$linkeBreak}";
var_dump(testRegexpMatch($pattern, $str));
echo $linkeBreak;
}
/**
* 测试正则匹配
* @param string $pattern 正则表达式
* @param string $string 源字符串
* @return array
*/
function testRegexpMatch($pattern, $string) {
try {
preg_match_all($pattern, $string, $matches);
} catch (Exception $e) {
return array(
'stauts' => false,
'msg' => $e->getMessage(),
'matches' => array(),
);
}
return array(
'stauts' => true,
'msg' => 'Success',
'matches' => $matches,
);
}