2011-10-06 15 views
8

属性我有问题的HTML匹配属性(在不同的HTML标签)用正则表达式。要做到这一点,我使用模式:正则表达式 - 匹配的HTML代码

myAttr=\"([^']*)\" 

HTML片段:

<img alt="" src="1-p2.jpg" myAttr="http://example.com" class="alignleft" /> 

它从myAttr结束/>选择文字,但我需要选择myAttr="..."( “http://example.com”)

回答

16

你有你的字符类中的撇号('),但你想要一个引号(")。

myAttr=\"([^"]*)\" 

这就是说,你真的是shouldn't be parsing HTML with regexes。 (对不起链接到再次回答。还有其他的答案,这个问题是更多的“如果你知道自己在做什么......”品种,但它是很好的了解。)

请注意,即使将您的regexing限制为属性,您也有很多需要考虑的因素:

  • 请注意不要在注释内部匹配。
  • 要小心,不要匹配CDATA节内。
  • 如果什么属性与单引号代替双引号括起来?
  • 如果属性根本没有引号,该怎么办?

这就是为什么预先建立的,严重的解析器一般要求。

4

的*是一个贪婪的量词。你应该有一个问号跟随它,使其非贪婪:

myAttr=\"([^']*?)\" 
2

如果你只想要myAttr参数,使用此:

"myAttr=\"([^\"]+)\"" 
0

,你可以尝试使用该

myAttr=\"?[\w:\-]+ ?= ?("[^"]+"|'[^']+'|\w+)\" 
0

< [^>] *>

刚刚尝试这一点我s此帮助删除所有标签

例 东西

+2

你看了这个问题吗? – Toto