2012-01-21 68 views
0

原始格式:獲取所有從頁面的URL使用正則表達式

<a href="http://www.example.com/t434234.html" ...>

1.我需要獲取這種格式的所有URL:

http://www.example.com/t[ANY CHARACTER].html 

任何性質值是從URL更改爲另一個值的地方。其餘的都是固定的。

這裏是我的嘗試:

preg_match("#http:\/\/www\.aqarcity\.com\/t[a-zA-Z0-9_]\.html#", $page, $urls); 

我得到空的結果。我不知道我在哪裏出錯...

+0

你想要的只是鏈接(即錨的'href'屬性),或者也在運​​行文本(這將不會被瀏覽器作爲任何特殊處理)? – Richard

+0

是的,這些鏈接分佈在html href中的所有頁面上。我需要將他們全部收集到一個數組中。網址是一個數組。沒有其他 – user311509

回答

1

問題似乎是[a-zA-Z0-9_]只能匹配一個字符。如果您想匹配零個或多個字符,請使用[a-zA-Z0-9_]*。對於一個或多個,請使用[a-zA-Z0-9_]+。對於六個字符,請使用[a-zA-Z0-9_]{6}。對於例如一到六個字符,使用[a-zA-Z0-9_]{1,6}

另請注意,由於您使用的是#作爲分隔符,因此不需要轉義/字符。據我所知,這不會讓你的代碼行爲不當,但如果你在斜槓前刪除反斜槓,它會更容易閱讀。

最後,請認識到正則表達式是一種使用HTML的相當危險的方式。在這種情況下,您可以從評論,Javascript代碼和其他非鏈接內容中選取匹配的URL。使用未加標準的正則表達式正確解析HTML是不可能的 - 他們沒有必要的表達能力。我不知道什麼樣的HTML解析器可用於PHP,但您可能需要查看它們。

+0

它看起來像'preg_match'只返回第一個匹配;對於所有比賽,你需要'preg_match_all'。請注意,對於'preg_match_all',匹配數組的格式稍有不同,因此請確保閱讀文檔以瞭解如何使用它。 –

+0

是的,剛剛解決了......你回答的同時我刪除了我的問題......乾杯 – user311509