正则表达式只返回一个匹配

时间:2010-07-16 21:09:56

标签: .net regex

此正则表达式仅返回一个匹配项。 (我想要检索所有图像源/位置(例如img html标签中src属性中包含的'folder / image.png')。

示例输入字符串:

input = @"<p>here is an image</p><img attr=""ahwer"" src=""~/Images/logo.png"" st=""abc""/><p>some more text here</p>";
            s += @"<p>test</p><img src=""a.jpg"" /><img src=""folder/image.png"" />"

模式

pattern = @"<img.*src=""([^""]*)"".*/>";

MatchCollection计数始终为1(奇怪的是,只有最后一个匹配,在本例中为'folder / image.png'。每当我将模式更改为'img'时,它会找到所有三个图像标记。所以,它很可能我的正则表达式模式不正确。我不是正则表达式大师,非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

Do not parse HTML using regular expressions

相反,您应该使用HTML Agility Pack,如下所示:

var doc = new HtmlDocument();
doc.Load(path);  
//Or 
doc.Parse(source);

var paths = doc.DocumentElement.Descendants("img")
                               .Select(img => img.Attributes["src"].Value);

答案 1 :(得分:2)

尝试pattern = @"<img.*?src=""([^""]*)"".*?/>"; - 使用。*?匹配应该是非贪婪的(即在匹配与下一部分之前不要消耗他们所能做的一切)。

答案 2 :(得分:0)

正则表达式的内部过于宽松,它允许匹配一次吞下所有图像标记。

但实际上,您不应该尝试使用正则表达式来解析HTML。疯狂就是这样......

答案 3 :(得分:0)

尝试模式

pattern = @"(?<=.src="")[\w\/\.~]+";