正则表达式匹配汉字
在正则表达式中,汉字属于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]);
提取非中文汉字