簡體   English   中英

正則表達式與PHP中的內容不匹配

[英]Regular Expression not matching content in PHP

我正在嘗試抓取這樣的eBay頁面: http ://www.ebay.co.uk/sch/Cars-/9801/i.html?_nkw=vw+golf

一切工作都很好,除了我的一個正則表達式只是不匹配內容,因此匹配沒有被推送到$linksArray我已經輸出了內容,以確保我要匹配的內容在這里確實存在-確實如此。 然后,我去所有匹配項都應該print_r($linksArray) 但事實並非如此。 它是一個空的多維數組。 您可以在這里看到我的實時示例: http : //www.mycommunity.co.za/marcksack/index.php

這是我的PHP代碼:

<?php
echo '<form method="POST">
<input type="text" id="url" name="url" size="120" value="' . (isset($_REQUEST["url"]) && !empty($_REQUEST["url"]) ? $_REQUEST["url"] : "") . '"/>
<input type="submit" value="Submit" />
</form>';
flush();

if (isset($_REQUEST["url"]) && !empty($_REQUEST["url"])) {
    $url = $_REQUEST["url"];
    $phones = array();
    for ($page = 1; $page <= 1; $page++) {

        // get page contents

        $contents = file_get_contents($url . "&_pgn=" . $page);
        echo(htmlentities($contents));
        // find all links patterns
        // HERE IS THE PROBLEM
        $pattern = '/class="lvtitle"><a href="(.*)" class="vip"/';
        $linksArray = array();
        preg_match_all($pattern, $contents, $linksArray);
        print_r($linksArray);
        $links = $linksArray[0];

        foreach($links as $link) {
            $pureLink = str_replace("class=\"lvtitle\"><a href=\"", "", $link);
            $pureLink = str_replace("\" class=\"vip\"", "", $pureLink);

            // getting sub page contents

            $subContents = file_get_contents($pureLink);

            // find all links patterns

            $subContents = str_replace(" ", "", $subContents);
            $phonePattern = '/07[0-9]{9}/';
            $phonesArray = array();
            preg_match_all($phonePattern, $subContents, $phonesArray);
            foreach($phonesArray[0] as $element) {

                // check if phone not added previousely to the phones array

                if (!in_array($element, $phones)) {

                    // add it to the phones array

                    array_push($phones, $element);
                    echo $element . "<br />";
                    flush();
                }
            }
        }
    }

    // print results
    foreach($phones as $phone){
        echo $phone."<br/>";
    }

}

?>

所以很明顯我的問題是我在做什么錯? 為什么不將匹配項推送到我的$linksArray變量中。 非常感謝您的幫助!

此正則表達式有效:

"/ class=\"lvtitle\"><a href=\"([^\"]*)\"  class=\"vip\"/"

您的幾個問題:

  1. 您試圖使用(。*)捕獲URL,該URL將匹配整行。
  2. 它與整行不匹配,因為ebay在class和href屬性之間有兩個空格。

另外,正如已經提到的,您應該為此使用API​​或DOMDocument。 但是如果您好奇的話,這就是為什么它不起作用的原因。 希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM