完善匹配中文的Php正規表示式

2021-08-31 05:31:13 字數 1737 閱讀 2127

這段時間試圖使用php正規表示式(perl相容正規表示式函式)處理中文文字資訊,在匹配中文上遇到諸多問題,求助於網上的參考資料,然網文多良莠不 齊,並存在諸多謬誤,經過幾天的探索和測試,終於總結出了幾種可用方式的,寫下供有興趣者參考,為紛繁複雜的網文又增加一篇。

1.籠統的使用元字元匹配中文,/.*?/s,可匹配一段中文,這在ansi(gb2312)和utf-8環境的程式**都可以實 現。但提醒一下,\w不能匹配中文。曾在一本《精通正規表示式》(人民郵電出版社,沙金編著)書上看到可以使用\w匹配中文,這裡糾正一下用php不行。 可以使用」/./」,」/[^\d]/」,」/[^a]/」,匹配中文字元。

2.如果要精準匹配中文,即匹配純中文本元,或匹配中文字元加上全形標點,則需要根據不同編碼環境使用不同方法。下面以兩種常用的編碼(gb2312,utf-8)進行介紹:

在ansi(gb2312)環境下,可使用[chr(0xnn)-chr(0xmm)]的方式匹配,如在一篇網文上就提供這樣的方 法,」/[".chr(0xb0)."-".chr(0xf7)."]+/」,這是可以使用的,但這太過籠統,這個表示式是匹配全部的gb2312編碼表 的字元(gb2312編碼表 /5a904010327e6609213f2e8d.html),既包括漢字、標點、日文平假名等,還有一些不知是什麼符號的。而從編碼表可以看出漢字 的編碼範圍是0xb0a1-0xf7fe,並且gb2312是用兩個位元組進行編碼的,每個位元組最高位都是1。所以可以藉此寫出單純匹配漢字的正則式:

"/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/",該表示式能匹配乙個中文字元,數量關係就可以容易擴充套件了。

並且舉一反三,如果想匹配全形標點而不匹配中文就可以這樣寫:

"/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/",就是匹配編碼範圍0xa1a1-0xa3ff內的符號。其他的類似。

3.下面介紹utf-8環境下中文的匹配。類似於上面,也可以使用unicode編碼表(全部編碼表,字型編輯用中日韓漢字unicode編碼表,

來確定中文的匹配。由編碼表可以看出,中文的編碼範圍是0x4e00-0x9fa5,於是正則式可以這樣寫:

"/[\x-\x]/u",\x表示字元的十六進製制形式,更多資訊請自己檢視php手冊。要特別注意的是模式修正符u,php手冊裡這樣說:u (pcre_utf8)此修正符啟用了乙個pcre中與perl不相容的額外功能。模式字串被當成utf-8。本修正符在unix下 自php 4.1.0起可用,在win32下自php 4.2.3起可用。自php 4.3.5起開始檢查模式的utf-8合法性。這正是正確匹配所必須的。其實也想提醒一下,是utf-8環境使用元字元匹配字串最好加上修正符 u,這只是經驗。

下面給兩個例子:

(1)ansi程式設計環境下:

$strtest = 「yyg中文字元yyg」;

$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";

if(preg_match($pregstr,$strtest,$matcharray))

//output:中文字元

(2)utf-8程式設計環境下:

$strtest = 「yyg中文字元yyg」;

$pregstr = "/[\x-\x]+/u";

if(preg_match($pregstr,$strtest,$matcharray))

//output:中文字元

完善匹配中文的Php正規表示式

這段時間試圖使用php正規表示式 perl 相容正規表示式函式 處理中文文字資訊,在匹配中文上遇到諸多問題,求助於網上的參考資料,然網文多良莠不齊,並存在諸多謬誤,經過幾天的探索和測試,終於總結出了幾種可用方式的,寫下供有興趣者參考,為紛繁複雜的網文又增加一篇。1.籠統的使用元字元匹配中文,s,可匹...

中文正規表示式匹配 正則中文匹配

這篇文章主要講如何使用正則 匹配中文字元,中文正規表示式的匹配規則不像其他正則規則一樣容易記住,下面一起看看這個中文正規表示式是怎麼樣的。w匹配的僅僅是中文,數字,字母,對於國人來講,僅匹配中文時常會用到,見下 匹配中文字元的正規表示式 u4e00 u9fa5 或許你也需要匹配雙位元組字元,中文也是...

中文正規表示式匹配 正則中文匹配

這篇文章主要講如何使用正則匹配中文字元,中文正規表示式的匹配規則不像其他正則規則一樣容易記住,下面一起看看這個中文正規表示式是怎麼樣的。w匹配的僅僅是中文,數字,字母,對於國人來講,僅匹配中文時常會用到,見下 匹配中文字元的正規表示式 u4e00 u9fa5 或許你也需要匹配雙位元組字元,中文也是雙...