首頁  >  文章  >  後端開發  >  php正規與資料收集詳解

php正規與資料收集詳解

小云云
小云云原創
2018-03-21 16:23:593011瀏覽
  • 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正規表示式的總結

php正規表示式處理方法

以上是php正規與資料收集詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn