php 正则表达式 匹配中日韩字符(GBK)
轉(zhuǎn)載鏈接:http://www.cnblogs.com/ITEagle/archive/2013/01/14/2859775.html
首先是這些非英文字符的編碼范圍:
這里是幾個(gè)主要非英文語(yǔ)系字符范圍
2E80~33FFh:中日韓符號(hào)區(qū)。收容康熙字典部首、中日韓輔助部首、注音符號(hào)、日本假名、韓文音符,中日韓的符號(hào)、標(biāo)點(diǎn)、帶圈或帶括符文數(shù)字、月份,以及日本的假名組合、單位、年號(hào)、月份、日期、時(shí)間等。
3400~4DFFh:中日韓認(rèn)同表意文字?jǐn)U充A區(qū),總計(jì)收容6,582個(gè)中日韓漢字。
4E00~9FFFh:中日韓認(rèn)同表意文字區(qū),總計(jì)收容20,902個(gè)中日韓漢字。
A000~A4FFh:彝族文字區(qū),收容中國(guó)南方彝族文字和字根。
AC00~D7FFh:韓文拼音組合字區(qū),收容以韓文音符拼成的文字。
F900~FAFFh:中日韓兼容表意文字區(qū),總計(jì)收容302個(gè)中日韓漢字。
FB00~FFFDh:文字表現(xiàn)形式區(qū),收容組合拉丁文字、希伯來(lái)文、阿拉伯文、中日韓直式標(biāo)點(diǎn)、小符號(hào)、半角符號(hào)、全角符號(hào)等。
比如需要匹配所有中日韓非符號(hào)字符,那么正則表達(dá)式應(yīng)該是^[\u3400-\u9FFF]+$?
理論上沒(méi)錯(cuò), 可是我到msn.co.ko隨便復(fù)制了個(gè)韓文下來(lái), 發(fā)現(xiàn)根本不對(duì), 詭異?
再到msn.co.jp復(fù)制了個(gè)'お', 也不得行..
然后把范圍擴(kuò)大到^[\u2E80-\u9FFF]+$, 這樣倒是都通過(guò)了, 這個(gè)應(yīng)該就是匹配中日韓文字的正則表達(dá)式了, 包括我們臺(tái)灣省還在盲目使用的繁體中文
而關(guān)于中文的正則表達(dá)式, 應(yīng)該是^[\u4E00-\u9FFF]+$, 和論壇里常被人提起的^[\u4E00-\u9FA5]+$很接近
需要注意的是論壇里說(shuō)的^[\u4E00-\u9FA5]+$這是專(zhuān)門(mén)用于匹配簡(jiǎn)體中文的正則表達(dá)式, 實(shí)際上繁體字也在里面, 我用測(cè)試器測(cè)試了下'中華人民共和國(guó)', 也通過(guò)了, 當(dāng)然, ^[\u4E00-\u9FFF]+$也是一樣的結(jié)果
?
然后上面的^[\u4E00-\u9FA5]+$形式的正則表達(dá)式php是不支持的。在stackoverflow上可以找到如下解決方案:
PCRE does not support the?\uXXXX?syntax. Use?\x{XXXX}?instead. See?here.
Your?\u2e80-\u9fff?range is also equivalent to
\p{InCJK_Radicals_Supplement}\p{InKangxi_Radicals}\p{InIdeographic_Description_Characters}\p{InCJK_Symbols_and_Punctuation}\p{InHiragana}\p{InKatakana}\p{InBopomofo}\p{InHangul_Compatibility_Jamo}\p{InKanbun}\p{InBopomofo_Extended}\p{InKatakana_Phonetic_Extensions}\p{InEnclosed_CJK_Letters_and_Months}\p{InCJK_Compatibility}\p{InCJK_Unified_Ideographs_Extension_A}\p{InYijing_Hexagram_Symbols}\p{InCJK_Unified_Ideographs}
Don't forget to add the?u?modifier (/regex here/u) if you're dealing with UTF-8. If you're dealing with another multi-byte encoding, you must first?convert?it to UTF-8.
?
也就是說(shuō),php要這樣寫(xiě)/[\x{2E80}-\x{9FFF}]+/u
?
另外,在實(shí)際操作的時(shí)候,我們可能發(fā)現(xiàn)我們使用preg_replace函數(shù),會(huì)產(chǎn)生和我們預(yù)期不符的結(jié)果。
$str= '你好,這里是賣(mài)咖啡!';比如我們定義如上字符串,然后使用preg_replace函數(shù)。這是編碼的問(wèn)題,我們使用的匹配字符串默認(rèn)是utf-8編碼的,但是$str很可能是gbk的,這時(shí)候我們需要使用iconv函數(shù)先進(jìn)行編碼轉(zhuǎn)化。
總結(jié)
以上是生活随笔為你收集整理的php 正则表达式 匹配中日韩字符(GBK)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百度seo排名点击器_SEO整站优化思路
- 下一篇: php 计算代码执行时间