2011-01-31 96 views
3

我有這樣的字符串。正則表達式選擇

<p class='link'>try</p>bla bla</p> 

我想只有<p class='link'>try</p> 我已經試過這一點。
/<p class='link'>[^<\/p>]+<\/p>/

但它不起作用。

我該如何做到這一點? 謝謝,

+1

正則表達式和HTML? http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2011-01-31 21:57:56

+0

雖然你當然*可以* [用正則表達式解析HTML](http://stackoverflow.com/questions/4284176/question-in-parsing-data-in-perl-where-am-i-going-wrong/4286326#4286326),如果它是通用HTML,你可能不想要。雖然「俘虜」HTML是好的;只是在它的「狂野」狀態中非常謹慎。 – tchrist 2011-02-01 01:02:47

回答

4

如果這是你的字符串,你想那些p標籤之間的文本,那麼這應該工作...

/<p\sclass='link'>(.*?)<\/p>/ 

原因你不工作是因爲你要添加<\/p>到你不是人物範圍。它不是字面上的匹配,而是單獨檢查每個字符。

當然,它是強制性我提到有用來解析HTML片段更好的工具(如HTML解析器。)

0
'/<p[^>]+>([^<]+)<\/p>/' 

將讓你「試穿」

0

它看起來像你使用此塊:[^<\/p>]+打算匹配除</p>以外的任何內容。不幸的是,這不是它所做的。 A []塊可以匹配裏面的任何字符。在你的情況下,/<p class='link'>[^<\/p>]+部分匹配<p class='link'>try</,但它並沒有緊跟着預期的</p>,所以沒有匹配。

亞歷克斯的解決方案,使用非貪婪限定符是我傾向於解決這類問題。

0

我試圖讓一個不太特定於任何特定的標籤。

(<[^/]+?\s+[^>]*>[^>]*>) 

這將返回:

<p class='link'>try</p>