【www.bbyears.com--正则表达式】
utf-8环 境下中文的匹配
\w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
或许你也需要匹配双字节字符,中文也是双字节的字符
匹配双字节字符(包括汉字在内):[^\x00-\xff]
注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
在ANSI(gb2312)环 境下
匹配全部的gb2312编 码表的字符:/[".chr(0xb0)."-".chr(0xf7)."]+/
单纯匹配汉字而不匹配全角标点:/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/
该表达式能匹配一个中文字符。
匹配全角标点而不匹配汉字:/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/
例子
代码如下1、使用preg_match函数匹配汉字
$str="asd我们cd";
$key="#[\x{4e00}-\x{9fa5}]#u";
preg_match($key,$str,$res);
print_r($res) ;
?>
结果:
Array([0]=>我)
2、使用preg_match函数匹配汉字(连续1个以上)
$str="34353434我们cd";
$key="#[\x{4e00}-\x{9fa5}]{1,}#u";
preg_match($key,$str,$res);
print_r($res) ;
?>
结果
Array([0]=>我们)
3、改善1,使用preg_match_all函数匹配
$str="34353434我们cd";
$key="#[\x{4e00}-\x{9fa5}]#u";
preg_match_all($key,$str,$res);
print_r($res) ;
?>
结果
Array([0]=>Array([0]=>我[1]=>们))
4、改善2,使用preg_match_all函数匹配汉字(连续1个以上)
$str="34353434我们cd";
$key="#[\x{4e00}-\x{9fa5}]{1,}#u";
preg_match_all($key,$str,$res);
print_r($res) ;
?>
结果
Array([0]=>Array([0]=>我们))
由结果可看出,使用[\x4e00-\x9fa5]这个正则表达式可以匹配到中文。
preg_match或者preg_match_all的不同的地方就是,前者匹配一次就完了(无论是否匹配成功),而后者,会从待匹配的字符串的开头到结尾匹配一遍。