2010-02-20 35 views
0

我需要一個正則表達式來檢測一個span和id類和class的順序無關的span元素。類的名字總是相同的ID始終有固定數量的數字,例如:需要定期的expr。對於屬性順序不重要的html元素

<span class="className" id="123"> 

<span id="321" class="className" > 

我在Java正則表達式的方法是:

String pattern = "<span class=\"className\" id=\"\\d*\">"; 

但我只能得到一個版本。可以幫助嗎?

謝謝,hansa

+0

您是否考慮過使用HTML解析器而不是正則表達式? – 2010-02-20 21:30:01

回答

7

不要用正則表達式解析HTML。 HTML不規則。

+0

謝謝,我同意你的回答。但除了span-tags外,沒有其他html標籤存在,並且它確保沒有跨度可以在另一個跨度內,所以跨度僅僅表示帶有id的括號。也許以後我會用JavaScript和DOM來處理。 – hansa 2010-02-23 12:00:38

0

我會做兩步版本,首先找到span標記有:

<span[^>]*class=\"classname\"[^>]*> 

然後挖出從配合

id=\"(\d+)\" 

正如其他第一圖案標籤的ID已經指出,用正則表達式解析HTML並不是一個好主意。但對於骯髒的數據處理,這是我如何做到這一點。

+0

謝謝,我用這個解決方案,它的工作原理。欲瞭解更多信息,請參閱Paul Tomblin的答案。 – hansa 2010-02-23 12:02:06

1

這應做到:

String r = "<span (?=[^<>]*\\bclass=\"className\")[^<>]*\\bid=\"(\\d+)\"[^<>]*>"; 

先行確認跨度是期望類的不消耗任何字符。然後,正則表達式的其餘部分從相同的位置開始,搜索id屬性並捕獲其值。 [^<>]*負責處理可能存在的任何其他屬性,同時確保所有匹配都發生在標記內。 (技術上,尖括號可以出現在屬性值中,但您可能不必擔心這一點。)

+0

+1不錯,儘管解析器更適合這項任務。 – BalusC 2010-02-20 22:43:23

+0

@BalusC:那裏沒有任何參數,但是我認爲如果可以不使用Cthulhu的名字,那麼給出正則表達式的答案會更有幫助。這樣我可以具體解釋爲什麼這個任務比OP期望的更復雜。 「HTML不規則」根本沒有任何幫助。 – 2010-02-20 23:21:43

+0

如果你理解(或者懶得查找)「規則」在解析計算機語法方面的含義,那麼「HTML不規則」是很多幫助。如果你理解(或查閱)常規手段,你會立即明白,你無法編寫正確解析HTML的正則表達式。根據定義,這不可能。 – 2010-02-21 04:30:42

相關問題