Php正則表達式匹配需要注意的問題

一個返回ip地址的get,在頁面上的數據如下


我想得到lo的值和lc的值,用PHPzheng標示爲:/.*lo="(.*)",.*/;然後獲取$1的值就可以了,不過在測試的過程中老是不能出現正確的lo,我就不得不輸出獲得的這個值來看,結果一看,竟然是亂碼,然後我又用語句:

iconv('GB2312','UTF-8',$string);

把編碼轉換成和頁面和數據庫一致的編碼方式UTF8,然後再輸出的時候顯示正確,解決了亂碼的問題。但是在用正則匹配的時候還是不行,真是遇了個悶。

然後我突然靈機一動!會不會因爲返回值中含有換行符!然後我看了一下源代碼:


果不其然,返回的頁面中含有換行符。如果用js獲取直接使用eval就行了,但是這個php啊,有時候處理數據起來還真得在正則表達式上下一番功夫。那麼發現了問題的根源,現在就着手解決問題。

後面加上[\s\S]進行包括換行符在內的任意字符的匹配。正則變爲:

/.*lo="(.*)",[\s\S]/;

Yes,匹配成功!

總結:

1.get數據源的時候看看源代碼是否有換行符

2.中文亂碼時,一定要把編碼方式通過iconv改成一致!

3..*通常情況下匹配的時候不含有換行符的任意字符。[\s\S]*則匹配的時候包括換行符的任意字符!

發佈了36 篇原創文章 · 獲贊 30 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章