繁体   English   中英

正则表达式匹配 img 标签的 url

[英]Regular expression to match img tag's url

这个正则表达式:

<IMG\s([^"'>]+|'[^']*'|"[^"]*")+>

给定此文本时似乎无休止地处理

<img src=http://www.blahblahblah.com/houses/Images/
    single_and_multi/roof/feb09/01_img_trrnjks_vol2009.jpg' />

我希望它 - 找不到匹配项(很快) - 因为文本中只有一个单引号。 我在 C# 和使用 Expresso 正则表达式工具时发生过这种情况。 如果文本短得多,它似乎可以工作。

<IMG\s([^"'>]+|'[^']*'|"[^"]*")+>

取出几个分支,开始和结束:

([^"'>]+)+

这个匹配“你好”有多少种方式?

(hell)(o)
(hel)(lo)
(hel)(l)(o)
(he)(llo)
(he)(l)(lo)
(he)(l)(l)(o)
... and so on

听起来像是正则表达式引擎回溯很多的情况之一。 Friedl 的 Mastering Regular Expressions 有一些关于这个主题的好材料。

其他评论者提到复杂性是性能问题的可能原因。 我要补充一点,如果你想匹配类似于 IMG 标签的东西,我认为你想要一个更像这样的正则表达式:

<IMG(\s+[a-z]+=('[^']*'|"[^"]*"|[^\s'">]+))+>

当然,仍然存在此正则表达式无法捕获的有效 HTML 变体。 就像结束/ (在 xhtml 中需要),或结束括号前的空格。 它会传递一些无效的情况,例如不受支持的属性名称。

我认为这就是您要尝试的,我认为您长时间运行的原因正如其他地方所提到的,由于贪婪地抓取非引号或 > 与字符串处理器进行或运算(也使用 greedy ["'>] 匹配。

这似乎使用正确格式或格式错误的标签快速运行。

<img(\s+((\w+)=(('[^']*?')|("[^"]*?"))))+? />

您能否发布您想要查找或提取的内容? 你想弄清楚 img 标签指向什么吗? 这将大大增加能够提供更好答案的机会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM