php
  • arrays
  • pattern-matching
  • preg-match-all
  • 2016-05-31 65 views 0 likes 
    0

    我想了解preg_match_all裏面有多個模式,所以我創建了html字符串變量和模式。preg_match_all多個模式留下空的數組值

    所有類似於修剪的工作都可以正常工作,但由於多種模式,它會輸出一些空值的數組鍵。如果你知道它爲什麼會這樣,請告訴我,並告訴我它是如何修復的。

    我的代碼:

    <?php 
         $cource = "<div><a href='test1'> <img src=\"test2\" /> <img src='test3' > <script src='test4'> <link href='test5'> </div>"; 
    
         preg_match_all('/src=["\']([^"\']+)|href=\'([^\']+)/',$cource, $result); 
    
         var_dump($result); 
    ?> 
    

    輸出:

    enter image description here

    +0

    這正則表達式是無效的,你確定這是你正在使用的模式? – Dale

    +0

    對不起,我編輯它,現在它是正確的 – Dest

    +0

    這就是輸出結構應該如何。每個'(...)'捕獲組獲得一個數組 - 每個只填充匹配的數組。而是用一個沒有捕獲組的'(?:x = | y =)' – mario

    回答

    0

    你得到使用兩個捕獲組的空值的原因,

    • 1日是src
    • 第二個是href

    所以你得到空值,按您的數據,第一個元素屬性href你有src空白(因爲它沒有它)等等等等。

    您可以在一個捕獲(第二個)組中抓取結果,第一個留給參考以獲取其來源的屬性。

    $cource = "<div><a href='test1'> <img src=\"test2\" /> <img src='test3' > <script src='test4'> <link href='test5'> </div>"; 
    
    preg_match_all('/(href|src)=["\']([^"\']+)/',$cource, $result); 
    

    如果你不需要引用屬性,可以使用非捕獲組?:

    preg_match_all('/(?:href|src)=["\']([^"\']+)/',$cource, $result); 
    

    在行動:https://eval.in/580585

    +1

    謝謝先生。它完美的作品。 – Dest

    +0

    @Dest歡迎您,請查看解釋,爲什麼你會得到空白值,我已經更新了我的答案 –

    +0

    我看到它再次感謝我現在瞭解。 – Dest

    相關問題