C#regex和html,结束于第一个“

时间:2009-11-09 21:43:46

标签: c# .net regex

我想从字符串中获取网址。继承我的代码以提取img url。

        var imgReg = new Regex("img\\s*src\\s*=\\s*\"(.*)\"");
        string imgLink = imgReg.Match(page, l, r - l).Groups[1].Value;

结果是

http://url.com/file.png" border="0" alt="

我如何解决这个问题,以便在第一次结束时“?我试过像

这样的东西
        var imgReg = new Regex("img\\s*src\\s*=\\s*\"(.*[^\\\"])\"");

但我得到了与原版相同的结果。

4 个答案:

答案 0 :(得分:4)

试试这个:

var imgReg = new Regex(@"img\s+src\s*=\s*""([^""']*)""");

另外,在“img”之后注意“\ s +”而不是“\ s *”。你需要至少一个空间。

你也可以使用星际算子的非贪婪(或“懒惰”)版本,它尽可能地匹配,尽可能匹配,并在第一时间停止,如你所愿结束语:

var imgReg = new Regex(@"img\s+src\s*=\s*""(.*?)""");

(注意“。*”之后的“?”)

答案 1 :(得分:3)

请考虑使用DOM(例如Html Agility Pack)来解析HTML而不是使用正则表达式。 DOM应该处理所有边缘情况;正则表达式不会。

答案 2 :(得分:1)

你的.*太贪心了。将其更改为以下内容,它将选择所有内容直到下一个双引号。

Source Text:  <img src="http://url.com/file.png" border="0" alt="" />
              <img src='http://url.com/file.png' border='0' alt='' />

RegEx:        <img\s*src\s*=\s*[\"\']([^\"\']+)[\"\']

我刚刚将(.*更改为([^"]+)。这意味着你将抓住每个非双引号字符直到正则表达式的下一部分。它还支持单引号或双引号。

答案 3 :(得分:0)

对我而言,你的(*。)正在捕捉你不想匹配的双引号。

您可以执行“”来匹配双引号,或者为链接匹配执行类似的操作

匹配(输入,@“http://(\ w。/)+ .png”);