正则表达式匹配img标记url

时间:2009-03-10 18:46:33

标签: c# .net regex

这个正则表达式:

<IMG\s([^"'>]+|'[^']*'|"[^"]*")+>
当给出这个文本时,

似乎无休止地处理

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

我希望它 - 找不到匹配(快速) - 因为文本中只有一个单引号。我已经在C#中使用了Expresso正则表达式工具。如果文字短得多,似乎有效。

5 个答案:

答案 0 :(得分:6)

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

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

([^"'>]+)+

这有多少种方法可以匹配“你好”?

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我认为这就是你想要的,我认为你长期运行的原因就像其他地方所提到的那样,由于贪婪的非引用或者&gt;引起的极度重复。正在使用字符串处理器(也使用贪婪的[“'&gt;]匹配。

对于正确格式化或格式不正确的标签,这似乎很快就会运行。

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

答案 4 :(得分:0)

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