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

PHP正則匹配字符串中的中文

編輯:關於PHP編程

本文章總結了php中利用正則表達式來匹配中文的一些實例函數,有需要的朋友可參考參考。

我們先要明白
中文雙字節字符編碼范圍

1. GBK (GB2312/GB18030)
x00-xff GBK雙字節編碼范圍
x20-x7f ASCII
xa1-xff 中文 gb2312
x80-xff 中文 gbk

2. UTF-8 (Unicode)

u4e00-u9fa5 (中文)
x3130-x318F (韓文
xAC00-xD7A3 (韓文)
u0800-u4e00 (日文)

獲取指定的中文與字符
例1

 代碼如下 復制代碼 <?php
$str = '正則如何匹配中文字在某中文字符串中?';
preg_match("/中/",$str,$regs);
print_r($regs);
?>

輸出
Array
(
    [0] => 中
)

例2

 代碼如下 復制代碼

<?php
$str = '這裡是中文 this is English';
//把中文變成紅色
echo preg_replace("/([x80-xff].)/","<font color=red>1</font>",$str);
//把非中文變成紅色
echo preg_replace("/([x20-x7f])/","<font color=red>1</font>",$str);
?>


 

簽裡面有中文、英文、數字等混排,則需要對漢字進行特殊處理,由於PCRE不支持U P L之類的perl字符串處理轉義,使用16進制或者Unicode進行處理,范例如下:

 代碼如下 復制代碼


$str = "之二寬闊的甘家口東#標簽1#標簽2 #標簽3。#標簽4,都發$1234 ¥xc,cvm , ¥12,dflksjf如何#標簽5.x #tag6.cvxcv“";
preg_match_all('/#([a-zA-Z0-9x7f-xff]+)/', $str, $mat);
print_r($mat);

preg_match("/[x{00a5}x{ffe5}](d+)/u", $str, $mat);
print_r($mat);


最後我明白了php中utf-8編碼下用正則表達式匹配漢字的最終正確表達式——/^[x{4e00}-x{9fa5}]+$/u

 代碼如下 復制代碼

$str = "php編程";
if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}


實例

下面這款匹配中文字符串正則表達式是一款利用數組,然後 多次for把全是中文字符串的打印出來。
*/
 

 代碼如下 復制代碼

$str_arr = array(
"iameverysorry",
"快樂編程,快樂生活",
"php教程編程",
"1997年香港回歸",
"英語學習abc",
"www.bkjia.com"
);

$patt_ch = chr(0xa1) . "-" . chr(0xff);

foreach ($str_arr as $str)
{
    echo "字符串'$str' 是";
    if (preg_match("/^[$patt_ch]+$/", $str))
    {
        echo "<b>完全中文</b>";
        echo "<br>";
        echo "<br>";
    }
    else
    {
        echo "非完全中文";
        echo "<br>";
        echo "<br>";
    }
}

更多詳細內容請查看:http://www.bkjia.com/phper/php-cy/34301.htm


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