首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要一个regex表达式,它可以从HTML内容字符串返回相对URL +查询字符串

我需要一个regex表达式,它可以从HTML内容字符串返回相对URL +查询字符串
EN

Stack Overflow用户
提问于 2011-12-15 21:02:04
回答 3查看 480关注 0票数 0

我已经从网站上找到了有用的正则表达式,但这个特定的表达式却让我无法理解。

基本上,我需要提取这个:

/上传酒窝/太空地球航空航天局高清壁纸62.jpg?n=6965

从此字符串中使用regex:

我所拥有的regex表达式不需要查询字符串就可以提取URL。如果正则表达式硬编码字符串‘/上载酒窝/’,这是可以的。然而,除了这种硬编码之外,其他一切都需要是通用的。这可能是任何东西--不仅仅是图像,还可以是链接到pdf文件的href。查询字符串也可以是有效的。

我发现的其他regex表达式只适用于以http等开头的绝对URL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-22 16:38:32

我不明白为何没有人能就这个问题提供一个可以接受的答案。对于任何需要从可能有效的HTML片段中完全提取任何类型的URL的开发人员来说,这将是一个非常实际的问题,下面是我在C#中验证的答案:

代码语言:javascript
运行
复制
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在C#中不能正常工作,因为我们必须转义"\“和”“字符。

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 22:20:11

我建议分阶段这样做,因为这样会简单得多。您可以更干净地使用.net,这里不需要正则表达式,如果您知道数据的格式,也不需要完整的dom解析器。假设您现在真正想要的是图像源的相对url,并且在html中只有一个图像,那么我建议如下所示。

代码语言:javascript
运行
复制
string Parse(string html)
{
    var temp = html.Substring(html.IndexOf("src=") + 5);
    return temp.Substring(0, temp.IndexOf("\""));
}

要使用正则表达式,基于kgoedtel的答案(稍微修改一下),您需要执行如下操作:

代码语言:javascript
运行
复制
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);
}
票数 0
EN

Stack Overflow用户

发布于 2011-12-15 22:32:30

假设你想要这样的审判?

代码语言:javascript
运行
复制
<([^=<>]+)=\\?"([^\\"]+)

否则,请不要对你真正想要解析的东西模棱两可。谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8526515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档