在php中要利用正則來匹配中文漢字的話我們需要了解字符串編碼然後還有漢字的內碼這樣才可以方便快速的實現精確的匹配中文漢字出來,下面我來給大家介紹介紹。
在php中來判斷字符串是否為中文,就會沿襲這個思路:
不過,很快就會發現,php並不支持這樣的表達,報錯:
Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support L, l, N, U,
or u at offset 3 in test.php on line 3
剛開始從google上查了很多次,想從php正則表達式對於十六進制數據的
表達方式上進行突破,發現在php中,是用x表示十六進制數據的。於是,
變換成如下的代碼:
代碼如下 復制代碼 $str = "php編程";貌似不報錯了,判斷的結果也正確,不過把$str換成“編程”兩字,結果卻還是顯示“該字符串不全部是中文”,看
來這樣的判斷還是不夠准確。
如果要精准匹配中文,即匹配純中文字符,或匹配中文字符加上全角標點,則需要根據不同編碼環境使用不同方法。
下面以兩種常用的編碼(gb2312,utf-8)
下面給兩個例子:
代碼如下 復制代碼(1) ANSI編程環境下:
$strtest = “yyg中文字符yyg”;
$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//output:中文字符
(2) Utf-8編程環境下:
$strtest = “yyg中文字符yyg”;
$pregstr = "/[x{4e00}-x{9fa5}]+/u";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//output:中文字符