PHP正規表示式主要用於字串的模式分割、符合、尋找及取代操作。使用正規表示式在某些簡單的環境下可能效率不高,
因此如何更好的使用PHP正規表示式需要綜合考慮。
PHP正規表示式的定義:
用來描述字元排列和匹配模式的一種語法規則。
PHP中的正規函數:
PHP中有兩套正規函數,兩者功能差不多,分別為:
一套是由PCRE(Perl Compatible Regular Expression)函式庫提供的。使用「preg_」為前綴命名的函數;
一套由POSIX(Portable Operating System Interface of Unix )擴充功能提供的。使用以「ereg_」為前綴命名的函數;
(POSIX的正規函數庫,自PHP 5.3以後,就不在建議使用,從PHP6以後,就將被移除)
由於POSIX正則即將推出歷史舞台,並且PCRE和perl的形式差不多,更利於我們在perl和php之間切換,所以這裡重點介紹PCRE正規的使用。
PCRE正規表示式
PCRE全稱為Perl Compatible Regular Expression,意思是Perl相容正規表示式。
在PCRE中,通常將模式表達式(即正規表示式)包含在兩個反斜線「/」之間,如「/apple/」。
正規中重要的幾個概念有:元字元、轉義、模式單元(重複)、反義、引用和斷言,這些概念都javascript中輕鬆的理解和掌握。
preg_filter —正規表示式搜尋與替換
preg_filter("正規", "取代","目標");
preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
preg_match — 執行一個正規表示式符合
preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
preg_match_all — 全域正規表示式符合
preg_replace — 執行一個正規表示式的搜尋與取代
preg_split — 透過一個正規表示式分隔字串
常用的元字元(Meta-character):
元字元 說明
\A 配對字串串首的原子
\Z 配對字串串尾的原子
\b b/ 配對尾為is的字串 /\bis\b/ 定界
\B 符合單字邊界以外的任一字元 /\Bis/ 符合單字「This」中的「is」
#########################'符合一個數字;等價於[0-9]###\D 符合數字以外任何一個字元;等價於[^0-9]###\w 符合一個英文字母、數字或底線;等價於[0-9a-zA-Z_]###\W 符合除英文字母、數字和底線以外任何一個字元;等價於[^0-9a-zA-Z_]###\s 符合一個空白字元;等價於[\f\t\v]###\S 符合空白字元以外任何一個字元;等價於[^\f\t\v]###\f 符合一個換頁符號等價於\x0c 或\cL### 配對一個換行符號;等價於\x0a 或\cJ### 配對一個回車子等價於\x0d 或\ 配對一個回車子等價於\x0d 或\cM###\t 匹配一個回車子等價於\x0d 或\cM###\t 價於\x09\或\cl###\v 符合垂直製表符;等價於\x0b或\ck###\oNN 符合一個八進位數字###\xNN 符合一個十六進位數字# ##\cC 符合一個控製字元###模式修正符(Pattern Modifiers):###模式修正符在忽略大小寫、匹配多行中使用特別多,掌握了這一個修正符,往往能解決我們遇到的很多問題。 ###i -可同時符合大小寫字母###M -將字串視為多行###S -將字串視為單行,換行符做普通字元看待,使「.」符合任何字元# ##X -模式中的空白忽略不計 ###U -與最近的字串 ###e -將取代的字串作為表達使用###格式:/apple/i符合「apple」或「Apple 」等,忽略大小寫。 /i###符合###字元 說明###\ 將下一字元標示為特殊字元、文字、反向引用或八進位轉義符。例如,“n”匹配字元“n”。 “\n”符合換行符。序列“\\”符合“\”,“\(”符合“(”。###^ 符合輸入字串開始的位置。如果設定了RegExp 物件的Multiline 屬性,^ 也會與“\n”或“ \r」之後的位置符合。###$ 符合輸入字串結尾的位置。如果設定了 RegExp 物件的 Multiline 屬性,$ 也會與「\n」或「\r」之前的位置相符。
* 零次或多次符合前面的字元或子表達式。例如,zo* 符合“z”和“zoo”。 * 等效於 {0,}。
+ 一次或多次符合前面的字元或子表達式。例如,“zo+”與“zo”和“zoo”匹配,但與“z”不匹配。 + 等效於 {1,}。
? 零次或一次符合前面的字元或子表達式。例如,「do(es)?」符合「do」或「does」中的「do」。 ? 等效於 {0,1}。
{n} n 是非負整數。正好符合 n 次。例如,「o{2}」與「Bob」中的「o」不匹配,但與「food」中的兩個「o」匹配。
{n,} n 是非負整數。至少匹配 n 次。例如,“o{2,}”不符合“Bob”中的“o”,而符合“foooood”中的所有 o。 “o{1,}”等效於“o+”。 「o{0,}」等值於「o*」。
{n,m} M 和 n 是非負整數,其中 n <= m。配對至少 n 次,至多 m 次。例如,「o{1,3}」符合「fooooood」中的頭三個 o。 'o{0,1}' 等價於 'o?'。注意:您不能將空格插入逗號和數字之間。
? 當此字元緊接在任何其他限定詞(*、+、?、{n}、{n,}、{n,m})之後時,配對模式是「非貪心的」。 「非貪心的」模式會匹配搜尋到的、盡可能短的字串,而預設的「貪心的」模式則會匹配搜尋到的、盡可能長的字串。例如,在字串“oooo”中,“o+?”只符合單一“o”,而“o+”符合所有“o”。
. 符合「\n」以外的任何單一字元。若要匹配包括“\n”在內的任意字符,請使用諸如“[\s\S]”之類的模式。
[] 符合[]裡面的任一
[^ ] 符合非[]裡面的任一
一、什麼是資料收集
幾年前,除幾個大型入口網站以外,基本上都是個人網站。資訊分散,內容也不多。
幾年後,商業網站越來越多,資訊需要大量集中,即便有足夠的財力聘請大量的文字編輯,
也未必能滿足無時無刻變化的資訊資源。
咨文採集已成了讓所有網站經營者青睞的技術。
二、資料收集的思路:
採集程式的思路很簡單大體可以分為以下幾個步驟:
1、取得遠端檔案原始碼(file_get_contents或用fopen 或則用fsocket實作http協議的get,或php 的curl擴充或php的其他第三方開源類別)
註:最好不要使用file_get_contents和fopen,會遇見你想像不到的問題,用fsocket實作http協定的get,現在大多數的網站都使用了防採集技術,採集內容的時候用資訊抽取技術。
2、分析程式碼得到自己想要的內容(這裡用正規配對)。
3、依據所得到的內容進行下載入庫等操作。
4、 依據你的網頁排版,顯示資料
三、分享一下個人的採集心得:
1.不採那些作防盜鏈了的站,其實可以作假來路但是這樣的站採集成本太高
2.採集盡量快的站,最好在本地進行採集
3.採集時有很多時候可以先把一部分資料存入資料庫,等以後進行下一步的處理。
4.採集的時候一定要作好出錯處理,我通常都是如果採集三次沒有成功就跳過。
以前常常就因為一條內容不能採就卡在那裡一直的採。
5.入庫前一定要作好判斷,檢查內容的合法,過濾不必要的字串。
四、分享一個連結位址:正規表示式線上測試
http://tool.chinaz.com/regex
五:分享一些常用的php正規
符合中文字元的正規表示式: [\u4e00-\u9fa5]
符合雙位元組字元(包括漢字在內):[^\x00-\xff]
符合HTML標記的正規表示式: /<(.*)> ;.*<\/>|<(.*) \/>/
符合IP位址的正規表示式 /(\d+)\.(\d+)\.(\d+)\. (\d+)/g
符合Email位址的正規表示式: \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.] \w+)*
符合網址URL的正規表示式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]* )?
配對資訊中的圖片連結: /(s|S)(r|R)(c|C)*=*('|")?(w||/|.)+('|" | *|>)?/
以正規表示式從URL位址中擷取檔案名稱:/(.*\/)([^\.]+).*/ig
中國電話號碼驗證/ ((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*/
中國郵遞區號驗證/d{6}/
電子郵件驗證/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/
身分證驗證/d{18}|d{15 }/
常用數字驗證 /d{n}/ n為規定長度 /d{n,m}/ n到m的長度範圍
非法字元驗證
符合非法字元如:< > & / ' |
正規表示式[^<>&/|'\]+
日期驗證
符合形式如:20030718,030718
範圍:1900--2099
正規表示式(( ((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}
相關推薦:
以上是php正規與資料收集詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!