2014-05-15 160 views
-1

我需要獲取HTML文件中所有'a'元素的href屬性值(大於特定長度)。我做了這樣的事情;正則表達式href最小長度

<a.*href\s*=\s*"(?<link>.{15,})".*> 

但它不能正常工作。有什麼建議麼?

+1

[Obligatory link](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)。它[似乎工作「很好」](http://regex101.com/r/eZ3jK6),我們需要更多的例子來調試什麼不工作。 – Sam

+0

我在Youtube的主頁上試了一下,發現了一些奇怪的字符串。我認爲這是因爲長度的原因,但現在我明白這個問題是另一回事了。 – Cem

+0

你可能不得不逃避雙引號。您測試的URL是否格式良好? 您應該給出一個示例輸入和「怪異字符串」輸出。你在.NET中這樣做,對吧? – statueofmike

回答

1

這裏有一些方法來避免捕獲標籤內多個字段:

嘗試使量詞非貪婪。 {15,}?而不是{15,}。這樣它將停止在第二個雙引號中,而不是在<a />標籤內捕獲更多字段。

一個更好的選擇是用更嚴格的東西來替換量詞前面的全部.。嘗試使用獨佔字符類,例如[^\s]{15,}將查找至少15個連續的非空白字符。

到目前爲止,這兩種方法都適用於我,但請記住,URL可能非常混亂,甚至在惡劣環境中變得格格不入,因此您無法保證抓住所有內容。你對目標網站的瞭解越多越好。

+0

我測試的最後一個是perl中的'「(?<= href = \」)[^ \ s] {15,}(?= \「。*>)」'「。 – statueofmike

+0

謝謝,我明白了。此外它不是一個專業的項目,只是一個簡單的下載管理器。 – Cem