程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php正則表達式匹配中文

php正則表達式匹配中文

編輯:關於PHP編程

在php中要利用正則來匹配中文漢字的話我們需要了解字符串編碼然後還有漢字的內碼這樣才可以方便快速的實現精確的匹配中文漢字出來,下面我來給大家介紹介紹。


在php中來判斷字符串是否為中文,就會沿襲這個思路:

 代碼如下 復制代碼 <?php
$str = "php編程";
if (preg_match("/^[u4e00-u9fa5]+$/",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}
?>

不過,很快就會發現,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編程";
if (preg_match("/^[x4e00-x9fa5]+$/",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}

貌似不報錯了,判斷的結果也正確,不過把$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:中文字符

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved