正则表达式选择

时间:2011-01-31 13:04:03

标签: ruby regex

我有一个这样的字符串。

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

我想只获得<p class='link'>try</p> 我试过了。
/<p class='link'>[^<\/p>]+<\/p>/

但它不起作用。

我怎么能这样做? 谢谢,

4 个答案:

答案 0 :(得分:4)

如果这是您的字符串,并且您希望这些p标记之间的文字,那么这应该有用...

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

您的工作不起作用的原因是您要将<\/p>添加到非字符范围内。它不是字面上匹配,而是单独检查每个字符。

当然,我必须提到有更好的工具来解析HTML片段(例如HTML解析器)。

答案 1 :(得分:0)

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

会让你“试试”

答案 2 :(得分:0)

您似乎使用了此块:[^<\/p>]+打算匹配除</p>之外的任何内容。不幸的是,这不是它的作用。 []块匹配其中的任何字符。在您的情况下,/<p class='link'>[^<\/p>]+部分与<p class='link'>try</匹配,但未立即跟随预期</p>,因此没有匹配。

Alex的解决方案,使用非贪婪的限定符是我倾向于解决这类问题的方法。

答案 3 :(得分:0)

我试图使一个特定标签不那么具体。

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

返回:

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

相关问题