久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

完善匹配中文的Php正則表達(dá)式

 cynial 2010-11-18
這段時(shí)間試圖使用php正則表達(dá)式(Perl 兼容正則表達(dá)式函數(shù))處理中文文本信息,在匹配中文上遇到諸多問(wèn)題,,求助于網(wǎng)上的參考資料,,然網(wǎng)文多良莠不齊,并存在諸多謬誤,,經(jīng)過(guò)幾天的探索和測(cè)試,,終于總結(jié)出了幾種可用方式的,寫(xiě)下供有興趣者參考,,為紛繁復(fù)雜的網(wǎng)文又增加一篇,。

1.       籠統(tǒng)的使用元字符匹配中文,/.*?/s,,可匹配一段中文,,這在ANSI(gb2312)和utf-8環(huán)境的程序代碼都可以實(shí)現(xiàn)。但提醒一下,,\w不能匹配中文,。曾在一本《精通正則表達(dá)式》(人民郵電出版社,沙金編著)書(shū)上看到可以使用\w匹配中文,,這里糾正一下用php不行,。可以使用”/./”,,”/[^\d]/”,,”/[^a]/”,匹配中文字符,。

2.       如果要精準(zhǔn)匹配中文,,即匹配純中文字符,,或匹配中文字符加上全角標(biāo)點(diǎn),則需要根據(jù)不同編碼環(huán)境使用不同方法,。下面以?xún)煞N常用的編碼(gb2312,utf-8)進(jìn)行介紹:

在ANSI(gb2312)環(huán)境下,,可使用[chr(0xnn)-chr(0xmm)]的方式匹配,如在一篇網(wǎng)文上就提供這樣的方法,,”/[".chr(0xb0)."-".chr(0xf7)."]+/”,,這是可以使用的,但這太過(guò)籠統(tǒng),,這個(gè)表達(dá)式是匹配全部的gb2312編碼表的字符(gb2312編碼表http://hi.baidu.com/gaojinshan/blog/item/5a904010327e6609213f2e8d.html),,既包括漢字、標(biāo)點(diǎn),、日文平假名等,,還有一些不知是什么符號(hào)的。而從編碼表可以看出漢字的編碼范圍是0xb0a1-0xf7fe,,并且gb2312是用兩個(gè)字節(jié)進(jìn)行編碼的,,每個(gè)字節(jié)最高位都是1 。所以可以藉此寫(xiě)出單純匹配漢字的正則式:

"/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/" ,,該表達(dá)式能匹配一個(gè)中文字符,,數(shù)量關(guān)系就可以容易擴(kuò)展了。

并且舉一反三,,如果想匹配全角標(biāo)點(diǎn)而不匹配中文就可以這樣寫(xiě):

"/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/",,就是匹配編碼范圍0xa1a1-0xa3ff內(nèi)的符號(hào)。其他的類(lèi)似,。

3.       下面介紹utf-8環(huán)境下中文的匹配,。類(lèi)似于上面,也可以使用unicode編碼表(全部編碼表,,http://hi.baidu.com/lbeny_hit/blog/item/bdb670efade0bffcb2fb95dc.html ,。字體編輯用中日韓漢字Unicode編碼表,http://www./tool/CJK.htm ,。)來(lái)確定中文的匹配,。由編碼表可以看出,中文的編碼范圍是0x4e00-0x9fa5,于是正則式可以這樣寫(xiě):

"/[\x{4e00}-\x{9fa5}]/u" ,,\x{nnnn}表示字符的十六進(jìn)制形式,,更多信息請(qǐng)自己查看php手冊(cè)。要特別注意的是模式修正符u ,,php手冊(cè)里這樣說(shuō):u (PCRE_UTF8) 此修正符啟用了一個(gè) PCRE 中與 Perl 不兼容的額外功能,。模式字符串被當(dāng)成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,,在 win32 下自 PHP 4.2.3 起可用,。自 PHP 4.3.5 起開(kāi)始檢查模式的 UTF-8 合法性,。這正是正確匹配所必須的。其實(shí)也想提醒一下,,是utf-8環(huán)境使用元字符匹配字符串最好加上修正符u,,這只是經(jīng)驗(yàn)。

下面給兩個(gè)例子:

(1)     ANSI編程環(huán)境下:

$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編程環(huán)境下:

$strtest = “yyg中文字符yyg”;

$pregstr = "/[\x{4e00}-\x{9fa5}]+/u";

if(preg_match($pregstr,$strtest,$matchArray)){

echo $matchArray[0];

}

//output:中文字符

 


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多