在正则表达式中,汉字属于Unicode编码范围内的字符,可以使用Unicode编码进行匹配。
例如,要匹配“你好”,可以使用正则表达式/[\u4e00-\u9fa5]/,
其中\u4e00表示第一个汉字的Unicode编码,\u9fa5表示最后一个汉字的Unicode编码。
实战:
header('Content-type: text/html; charset=UTF-8'); $pattern = '/[\x{4e00}-\x{9fa5}]/u'; $str = '中文汉字字符串123456'; preg_match($pattern, $str, $matches); print_r($matches);
结果:匹配成功
Array ( [0] => 中 )utf-8编码环境
php中,是用\x表示十六进制数据的。
– `\x{4e00}` 是中文字符的Unicode编码起始值;
– `\x{9fa5}` 是中文字符的Unicode编码结束值;
– `[]` 表示字符集,里面的 `\x{4e00}-\x{9fa5}` 表示从 `\x{4e00}` 到 `\x{9fa5}` 这个范围的字符;
– `+` 表示匹配一个或多个字符;
– `/u` 告诉正则表达式引擎使用UTF-8编码
在上面的例子中,使用了 "u" 模式修饰符来支持 Unicode 字符编码,从而匹配中文字符。
在 PHP 中使用正则表达式匹配中文,需要考虑中文字符的 Unicode 编码范围,
常用的是 [\x{4e00}-\x{9fa5}],其中 \x{4e00} 表示汉字 "一" 的 Unicode 编码,
\x{9fa5} 表示汉字 "髙" 的 Unicode 编码。
这个范围包含了大部分的中文字符。
UTF-8 (Unicode)
u4e00-u9fa5 (中文)
x3130-x318F (韩文)
xAC00-xD7A3 (韩文)
u0800-u4e00 (日文)
实战:
$str=preg_replace('/[^\x{4e00}-\x{9fa5}]/iu','',$str);
提取中文汉字
$str=preg_replace('/[\x{4e00}-\x{9fa5}]/iu','',$str]);
提取非中文汉字