我想从字符串中获取网址。继承我的代码以提取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*\"(.*[^\\\"])\"");
但我得到了与原版相同的结果。
答案 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”);