2008-11-07 102 views

回答

5

你不能用正則表達式解析HTML。如果你事先知道頁面的格式 - 例如。

  • 鏈接的形式始終< A HREF =「鏈接,沒有多餘字符轉義」>,或
  • 所有的鏈接都是絕對的,以http開頭沒有其他非鏈路串:存在

那麼你可以放棄它,但對於一般的[X] HTML正則表達式解析器是不合適的。

根據您使用的語言,您需要找到HTML解析器庫(例如Python的BeautifulSoup)或HTML整理器與標準XML解析器的組合,然後掃描文檔以找到< a>元素(也可能是其他人,如< img>如果你對這些感興趣?),然後在'?'上分割屬性值。

+0

謝謝bobince,我實際上使用的是BeautifulSoup,但是在尋找一種快速和骯髒的方式,而不是遍歷所有鏈接。 – EoghanM 2008-11-07 12:50:13

2

回覆:Bobince的評論,HTMLAgilityPack是一個很好的用於.NET的html解析器,它比其他解析器更能處理不正確的標記。

使用它可以讓你找到所有的A標籤,然後你就可以得到HREF並且簡單地刪除任何東西,包括'?'

0

找到這個:

/href="([^\?"]*?)\?[^\"]*"/ 

替換:

href="\1" 

你可能要小心,它不會刪除<link>標籤。

+0

有不少匹配的情況:href =「foo?bar」,href = foo?bar(無效,但仍然可以出現)href ='foo?bar' – Greg 2008-11-07 11:28:27

相關問題