【问题标题】:Writing a REGEX to match the src, height and width attributes of an img tag编写一个正则表达式来匹配 img 标签的 src、height 和 width 属性
【发布时间】:2009-05-19 06:22:45
【问题描述】:

我正在尝试编写一个正则表达式来匹配图像标签上的 src、宽度和高度属性。宽度和高度是可选的。

我想出了以下几点:

(?:<img.*)(?<=src=")(?<src>([\w\s://?=&.]*)?)?(?:.*)(?<height>(?<=height=")\d*)?(?:.*)(?<width>(?<=width=")(\d*)?)?

expresso 仅显示以下 html sn-p 的 src 位匹配

<img src="myimage.jpg" height="20" />
<img src="anotherImage.gif" width="30"/>

我希望我真的很亲密,这里有人可以指出我做错了什么,我觉得它是我在字符之间的可选位 (?:.*) 我试过让它不贪心没有成功。那么有什么建议吗?

【问题讨论】:

  • 为什么需要使用正则表达式?你能不通过 HTML 解析库运行它,而是使用 XMLReader 函数吗?
  • Regex 语法在不同的语言中是不同的。那么您使用的是哪种语言? Perl,红宝石,还有别的吗?更重要的是,考虑使用 html 解析器而不是正则表达式。如果 src 在宽度和高度之后而不是之前,你认为正则表达式会匹配吗?

标签: regex


【解决方案1】:

使用正则表达式从 HTML 中提取值总是一个错误。 HTML 语法要复杂得多,它可能首先出现,而且页面很容易捕捉到非常复杂的正则表达式。

请改用HTML Parser。

This question has been asked before 并且会再次被询问。正则表达式似乎是解决这个问题的好选择,但事实并非如此。

【讨论】:

  • 使用 HTML 解析器要容易得多,我使用了 HTMLAgilityPack,速度快得多,并且给您更多控制。非常感谢
【解决方案2】:

正则表达式根本不擅长解析 HTML(请参阅 Can you provide some examples of why it is hard to parse XML and HTML with a regex? 了解原因)。您需要的是一个 HTML 解析器。有关使用各种解析器的示例,请参阅 Can you provide an example of parsing HTML with your favorite parser?。

【讨论】:

    【解决方案3】:

    在大多数正则表达式方言中,.* 是“贪婪的”并且会过度匹配;改用.*? 来匹配“尽可能少”。

    【讨论】:

      【解决方案4】:

      我没有机会测试它,但也许这对你有用(注意我没有使用命名匹配):

      <img(?:(\s*(src|height|width)\s*=\s*"([^"]+)"\s*)+|[^>]+?)*>
      

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-30
        • 2011-04-12
        • 1970-01-01
        相关资源
        最近更新 更多