最近在寫乙個微博客戶端,很多邏輯功能實現想自己重新寫一遍。其中遇到微博的使用者名稱匹配問題。困擾了很久。終於解決,於是乎對php的正則匹配模式有了一定的認識。在這裡記錄一下,一來當作筆記以作以後的複習,二來也希望能跟大家分享一下經驗。
但是其中遇到的就是當正規表示式中包含中文字元的時候(其實對於包含中文漢字的正規表示式也可能會出錯),匹配結果的輸出會出現亂碼。而這個亂碼是大家很熟悉的「�」,哈?不知道?那我告訴你,當utf-8的字元被解析為gbk的時候,且utf-8字元在轉換到gbk的時候無法找到對應的編碼,就會出現這個「�」。
很明顯,這就是編碼問題導致的。如何解決?網上有許多網友也很糾結。我也是谷歌了半天也不見答案。於是乎,最終只能苦逼地去php官網找文件了。
皇天不負有心人,我在這個頁面找到了答案:
這裡解釋的是php關於正規表示式的各種模式(基於類似於perl的正則匹配模式的,所以用的是pcre)
在這裡問簡略地解釋一下:
i模式:大小字母不敏感匹配
m模式:單行匹配
s模式:「.」修飾符所有匹配,也就是能夠匹配換行符,也可以理解為多行匹配
x模式:非嚴格匹配,對於不能解析的字元,採取的是忽略匹配方式,但不能忽略空格
e模式:執行匹配,在匹配欄位前會對替換表示式進行eval操作,也就是語句執行,再替換符合表示式的結果
a模式:「錨定」模式,匹配從目標字串開始位置搜尋
d模式:忽略換行模式,一般來說$匹配字串末尾或者是換行符,但是在這種模式下,換行符將會被忽略
s模式:非「錨定」模式,這個我可能還得去實踐一下才能了解具體功能,但是根據文件的解釋,這是一直多資料匹配的效能優化模式
u模式:非貪婪模式,不需多說
x模式:事實上沒多大用,就是當不需要轉義的字元被轉義了,表示式將會報錯
j模式:允許字組重名的乙個模式
u模式:bingo!that's what i want!在這個模式下,模式字串會被認為是utf-8編碼,於是乎,用了這種模式,匹配的結果不再出現亂碼!
而對於php的中文匹配,可能大多數人都了解,\x-\x就是中文符集,在此不再多說。
php正規表示式詳解,PHP正規表示式使用詳解
操作符 描述 轉義符 圓括號和方括號 限定符 anymetacharacter 位置和順序 或 操作 全部符號解釋 字元 描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開...
PHP正規表示式,關於PHP正規表示式的問題
php正規表示式,關於php正規表示式的問題 正規表示式確是乙個很強大的東東,值的學習學習,以下是關於php正規表示式的高階部分。什麼是正規表示式,php正規表示式 因第一次投稿,如有錯誤,請多多包涵。說起正規表示式 可以一直上溯至對人類神經系統如何工作 的早期研究。warren mcculloch...
PHP正規表示式
php正規表示式的定義 用於描述字元排列和匹配模式的一種語法規則。它主要用於字串的模式分割 匹配 查詢及替換操作。php中的正則函式 php中有兩套正則函式,兩者功能差不多,分別為 一套是由pcre perl compatible regular expression 庫提供的。使用 preg 為字...