我已经从网站上找到了有用的正则表达式,但这个特定的表达式却让我无法理解。
基本上,我需要提取这个:
/上传酒窝/太空地球航空航天局高清壁纸62.jpg?n=6965
从此字符串中使用regex:
我所拥有的regex表达式不需要查询字符串就可以提取URL。如果正则表达式硬编码字符串‘/上载酒窝/’,这是可以的。然而,除了这种硬编码之外,其他一切都需要是通用的。这可能是任何东西--不仅仅是图像,还可以是链接到pdf文件的href。查询字符串也可以是有效的。
我发现的其他regex表达式只适用于以http等开头的绝对URL。
发布于 2011-12-22 16:38:32
我不明白为何没有人能就这个问题提供一个可以接受的答案。对于任何需要从可能有效的HTML片段中完全提取任何类型的URL的开发人员来说,这将是一个非常实际的问题,下面是我在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在C#中不能正常工作,因为我们必须转义"\“和”“字符。
发布于 2011-12-15 22:20:11
我建议分阶段这样做,因为这样会简单得多。您可以更干净地使用.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);
}
发布于 2011-12-15 22:32:30
假设你想要这样的审判?
<([^=<>]+)=\\?"([^\\"]+)
否则,请不要对你真正想要解析的东西模棱两可。谢谢!
https://stackoverflow.com/questions/8526515
复制相似问题