0

这里需要一个正则表达式大师!

<img src="\img.gif" style="float:left; border:0" />
<img src="\img.gif" style="border:0; float:right" />

鉴于上述 HTML,我需要一个匹配“float:right”或“float:left”的正则表达式模式,但仅在 img 标签上。

提前致谢!

4

3 回答 3

4
/<img\s[^>]*style\s*=\s*"[^"]*\bfloat\s*:\s*(left|right)[^"]*"/i

但是,必须建议您:根据我的经验,无论您编写什么正则表达式,有人都能够提出有效的 HTML 来破坏它。如果您真的想以通用、可靠的方式执行此操作,则需要解析 HTML,而不是向其抛出正则表达式。

于 2009-08-31T21:34:45.230 回答
2

你真的不应该使用正则表达式来解析 html 或 xml,设计一个可以处理所有极端情况的万无一失的正则表达式是不可能的。相反,我建议为您选择的语言找到一个 html 解析库。

也就是说,这是使用正则表达式的可能解决方案。

<img\s[^>]*?style\s*=\s*".*?(?<"|;)(float:.*?)(?=;|").*?"

"float:" 将在唯一的捕获组中被捕获,该组应该是数字 1。

正则表达式基本上匹配 img 标记的开头,后跟任意类型的非右括号字符,然后是样式属性。在 style 属性的值中,float: 可以在属性中的任何位置,但它应该只匹配实际的 float 样式(即它前面是属性的开头或分号,后面是分号或属性的结尾) .

于 2009-08-31T21:39:03.053 回答
0

我同意 Sean Nyman 的观点,最好不要使用正则表达式(至少不要用于任何永久性的)。对于临时的和更耐用的东西,您可以尝试:

/<img\s(?:\s*\w+\s*=\s*(?:'[^']*'|"[^"]*"))*?\s*\bstyle\s*=\s*(?:"[^"]*?\bfloat\s*:\s*(\w+)|'[^']*?float\s*:\s*(\w+)/i
于 2009-08-31T21:46:12.773 回答