我們先要明白,中文雙字節字符編碼范圍:
1. GBK (GB2312/GB18030)
x00-xff GBK雙字節編碼范圍
x20-x7f ASCII,xa1-xff 中文 gb2312,x80-xff 中文 gbk
u4e00-u9fa5 (中文),x3130-x318F (韓文),xAC00-xD7A3 (韓文),u0800-u4e00 (日文)
獲取指定的中文與字符,例1,代碼如下:
- <?php
- $str = '正則如何匹配中文字在某中文字符串中?';
- preg_match("/中/",$str,$regs);
- print_r($regs);
- ?>//開源代碼Vevb.com
- //輸出
- 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);
- //開源代碼Vevb.com
- 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.companysz.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>";
- }
- }
新聞熱點
疑難解答