编写REGEX以匹配img标记的src,height和width属性

时间:2009-05-18 22:06:47

标签: regex

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

我想出了以下内容:

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

expresso显示这只匹配以下html代码段的src位

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

我希望我真的很亲密,这里的某个人可以指出我做错了什么,我有一种感觉它是我在字符之间的可选位(?:。*)我试过让它变得非常贪婪没有成功。那么有什么指针吗?

4 个答案:

答案 0 :(得分:9)

使用正则表达式从HTML中提取值总是一个错误。 HTML语法可能首先出现得非常复杂,而且即使是非常复杂的正则表达式,页面也很容易识别出来。

改为使用HTML Parser

This question has been asked before将再次被问到。正则表达式对于这个问题似乎是一个很好的选择,但它们不是。

答案 1 :(得分:3)

正则表达式在解析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?

答案 2 :(得分:1)

在大多数正则表达方言中,.*是“贪婪的”并且会超越;使用.*?代替“尽可能少”。

答案 3 :(得分:1)

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

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