我需要一个正则表达式,它可以从HTML内容字符串返回给我的相对URL +查询字符串
本文关键字:字符串 返回 HTML 我的 查询 URL 相对 一个 正则表达式 | 更新日期: 2023-09-27 18:17:55
我从网站上找到了一些有用的正则表达式,但是这个特别的表达式让我很困惑。
基本上,我需要提取这个:
/uploadeimages/space earth NASA hd wallpapers 62.jpg?n=6965
使用正则表达式:
& lt; p>测试& lt; a href = '"http://www.hotmail.com?id=1 '"title = '"詹姆斯'"祝辞james& lt; a href = '"http://mail.gmail.com/index.asp?id=1 '"title = '"拉弗蒂'"祝辞lafferty& lt; a href = '"https://mail.google.com/index.asp?id=1 '"title = '"约瑟夫'"祝辞joseph& lt; strong>swami& lt; a href = '"http://mail.yahoo.com/tests?id=1 '"title = '"'"祝辞greatGuy . ' r ' n
& lt; br/祝辞& lt;/p> ' r ' n
& lt; br/祝辞& lt;/p>
我使用的正则表达式提取了没有查询字符串的URL。如果正则表达式硬编码字符串'/uploadeimages/',则可以。但是,除了硬编码之外,其他所有内容都需要是通用的。这可以是任何东西-不仅仅是一个图像,可以是一个链接到pdf文件的href。查询字符串可以是任何有效的。
我发现其他正则表达式只能与以http等开头的绝对url一起工作
我不知道为什么没有人能对这个问题提供一个可接受的答案。对于任何需要从HTML片段中提取任何类型的url的开发人员来说,这可能是一个非常现实的问题,这可能是或可能不是有效的HTML,这里是我在c#中验证过的答案:
matches = Regex.Matches(target, "(?<='")(http:|https:)?[/''''](?:[A-Za-z0-9-._~!$&'()*+,;=:@ ]|%[0-9a-fA-F]{2})*([/''''](?:([A-Za-z0-9-._~!$&'()*+,;=:@ ]|%[0-9a-fA-F]{2}))*)*(?:''?[a-zA-Z0-9=/''''&]+)?(?='")", RegexOptions.IgnoreCase);
这将在HTML片段中提取任意数量的url和查询字符串,我还继续并修改了REGEX,以便它在c# REGEX中与转义字符一起正常工作。纯REGEX在c#中不能按原样工作,因为我们必须转义"'"answers"字符。
假设您想要这样的正则表达式?
<([^=<>]+)=''?"([^''"]+)
否则,请不要对您实际试图解析的内容模棱两可。谢谢!
我建议分阶段进行,因为这样会简单得多。您可以以更清晰的方式使用。net,这里不需要正则表达式,如果您知道数据的格式,也不需要完整的dom解析器。假设目前您真正想要的是图像源的相对url,并且html中只有一个图像,那么我建议使用如下方式:
string Parse(string html)
{
var temp = html.Substring(html.IndexOf("src=") + 5);
return temp.Substring(0, temp.IndexOf("'""));
}
要使用正则表达式,根据kgoedtel的答案(稍作修改),您需要这样做:
string Parse(string html)
{
var r = new Regex("<img [^=<>]+=''''?'"([^'''''"]+)");
return r.Match(html).Groups[1].Value;
}
IEnumerable<string> ParseMany(string html)
{
var r = new Regex("[^=<>]+=''''?'"([^'''''"]+)");
return r.Matches(html).OfType<Match>().Select(m=>m.Groups[1].Value);
}