2011-01-31 140 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>