2012-02-06 76 views
1

我正在尋找正則表達式模式來驗證我的HTML輸入具有正確的結構,並且(可能在第二步中)從中提取一些信息。正則表達式:模式匹配多行輸入

例的inputText:

<title>Example Title</title><br /> 
<link>Download:</link> <a href="URL">hier</a> | hoster1 <br /> 
<link>Download:</link> <a href="URL">hier</a> | hoster2 <br /> 
<link>Download:</link> <a href="URL">hier</a> | hoster3 

標題,主機託管服務提供商,當然URL能改變的,很有意思趕上,所以我的嘗試是這樣的:

<title>([^<]+?)</title><br />\s<link>Download:</link> <a href="([^"]+?)">hier</a> \| ([^<]+?)<br />\s 

這些羣體似乎有點愚蠢的,但我也試過(。*?),甚至懶惰模式,他只會匹配整條線。

  1. 眼下的第二部分(<鏈接>部分)匹配,但不與<標題>一個組合。我猜我的空白字符(\ s)不匹配一個新行?我怎樣才能檢查一個換行符?

  2. 可用鏈接的數量是動態的,所以我不知道有多少個<鏈接>標籤。我怎樣才能使用模式的後半部分作爲可重複的模式? Id喜歡做這樣的事情(這顯然不起作用這種方式):

    [ <link>Download:</link> <a href="([^"]+?)">hier</a> \| ([^<]+?)<br />\s ]*

這一切都具有多選項設置操作(雖然我不是太肯定這是需要我想做什麼做做)。

我試了幾天不同的東西,現在沒有任何地方,我真的很感激正確的方向的幾個指針,謝謝。

回答

0

無論你需要一個新的行字符,還是使用[^\n],只需添加[^\r\n]

2

對這類任務使用適當的HTML解析器,如jsoup;正則表達式適用於非常簡單的情況,但會很快變得笨拙。一個HTML解析器將更快,更容易,更正確地實現,特別是當你開始進行更高級的測試時。