2013-03-28 109 views
3

我正在尋找一個正則表達式,它必須在不同類型的HTML標記之間提取文本。正則表達式提取HTML標記之間的文本

對於離:

<span>Span 1</span> - O/P:跨度1

<div onclick="callMe()">Span 2</div> - O/P:跨度2

<a href="#">HyperText</a> - O/P:超文本

我發現這件特別的作品<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1> m here但這一個不起作用。

+1

請詳細說明它是如何工作的。 – MikeM

+3

我想引用你到這個問題的傳說中最佳答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Philipp

+0

@MikeM它是不工作我的意思是,它沒有給出預期的結果。它沒有提取內容,而是顯示整個HTML標籤 – Sriram

回答

7

您的評論顯示您忽略了您的正則表達式字符串中的反斜槓。

如果你想匹配小寫字母添加a-z到字符類或使用Pattern.CASE_INSENSITIVE(或添加(?i)到正則表達式的開頭)

"<([A-Za-z][A-Za-z0-9]*)\\b[^>]*>(.*?)</\\1>" 

如果標籤內容可能包含換行符,然後使用Pattern.DOTALL或將(?s)添加到正則表達式的開頭以打開dotall/singleline模式。

+0

謝謝你。是的,我錯過了在表達式中添加反斜槓。我在這個表達式中尋找一個更多的選項,遞歸地檢查html標籤並最終獲得這些標籤之間的文本。 **例如:**'test'我希望這次我很清楚。 – Sriram

+0

哦!有一個投票:( – Sriram

+0

@Sriram。要獲得內部標籤,你將不得不在循環中使用上述正則表達式,但我認爲你會更好地問一個新的問題。 – MikeM

-1

一個非常特殊的方式:

(<span>|<a href="#">|<div onclick="callMe\(\)">)(.*)(</span>|</a>|</div>) 

,但是,是的,這隻會爲那些3個實例工作。您需要使用HTML解析器。

+0

的情況下可以與任何的HTML標籤之間的內容。不能說。 – Sriram

1

這應該滿足您的需求:

<([a-zA-Z]+).*?>(.*?)</\\1> 

第一組包含的標籤名,第二個值其間。

+0

如果存在多個標記,則reg表達式無效 – varpekv

相關問題