php
  • regex
  • html-parsing
  • 2013-02-18 71 views -1 likes 
    -1

    這裏有麻煩的是我的代碼:與preg_match_all

    preg_match_all('/<a href="(.+?)index.php(.+?)&abc=(.+?)"/', $dataToParse, $matches); 
    
    foreach ($matches as $val) 
    { 
        $absUrl = $val[1] . 'index.php' . $val[2] . '&abc=' . $val[3]; 
    
        echo $absUrl; 
    } 
    

    然而,$val[1]是整個匹配的字符串,包括<a href。我相信我的語法錯了,但我一直在努力解決它,沒有運氣。不知道如何正確地做到這一點。

    +4

    正確地做它會涉及一個DOM解析器,而不是使用正則表達式來解析HTML。 – cspray 2013-02-18 21:25:08

    +3

    2013年。使用XML解析器。 – 2013-02-18 21:25:16

    +0

    @JackManey:繼承一個項目與其他人這樣做。 – 2013-02-18 21:28:43

    回答

    4

    嘗試傳遞常量PREG_SET_ORDER$matches一個之後,像這樣:

    preg_match_all("/.../",$dataToParse,$matches,PREG_SET_ORDER); 
    

    對於爲何更多信息,請參閱documentation

    0

    $比賽[0]是整個字符串,$匹配[1]是第一個匹配組,$匹配[2]第二個匹配組等等。

    for($i = 0; $i < count($matches[1]); $i++) 
    { 
        $absUrl = $matches[1][$i] . 'index.php' . $matches[2][$i] . '&abc=' . $matches[3][$i]; 
        echo $absUrl; 
    } 
    
    +0

    有麻煩的答案。 – circusdei 2013-02-18 21:34:40

    相關問題