正则表达式 - 匹配 HTML 代码中的属性

31

我在使用正则表达式匹配各种HTML标签中的属性时遇到了问题。为此,我使用以下模式:

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

HTML代码片段:

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

它从myAttr的结尾/>选择文本,但我需要选择myAttr="..."("http://example.com")。

5个回答

40

您在字符类内使用了一个撇号 ('),但您需要一个引号 (")。

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

话虽如此,你真的 不应该用正则表达式解析HTML。(很抱歉又链接到了那篇回答。还有其他的回答是更多“如果你知道你在做什么…”的类型,但知道这个问题非常重要。)

请注意,即使您将正则表达式限制为属性,您仍需考虑以下事项:

  • 小心不要匹配到注释内部。
  • 小心不要匹配到CDATA部分内部。
  • 如果属性用单引号而不是双引号括起来怎么办?
  • 如果属性根本没有引号呢?

这就是为什么通常需要预先构建严格的解析器。


如果属性值包含 ",则此正则表达式将出错,例如<a href="dddd" c=""abc""/>。 - xiaoyifang
很好,又一个不使用正则表达式的好理由!这完全是错误的方法。 - Ray Toal

10

*是一个贪婪量词。您应该在其后加上问号以将其变为非贪婪模式:

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

3

如果你仅需要 myAttr 参数的值,使用以下代码:

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

2
你可以尝试使用这个。
 myAttr=\"?[\w:\-]+ ?= ?("[^"]+"|'[^']+'|\w+)\"

-5

<[^>]*>

尝试这个,它可以帮助你删除所有标签

例如

一些内容


5
你有没有读这个问题? - Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接