问题描述
|
我已经在使用HtmlAgilityPack解析页面,并获取大多数img来源。但是,许多网站在img src属性(例如,内联javascript,其他属性,其他元素)之外的其他位置都包含img网址。我想投放一个稍宽的网,并在整个html字符串上运行一个正则表达式,以捕获正则表达式中的以下内容。
必须以http://,https://,//或/开头
然后,任意数量的有效网址路径字符
必须以.jpeg,.jpg,.png或.gif结尾
我想这很容易写,但是我不是一个很棒的正则表达式。我想这些零件看起来像这样
^((https?\\:\\ / \\ /)|(\\ / {1,2}))
(有任何想法吗?)
(。(jpe?g | png | gif))$
谁能帮我填补空白?
谢谢
回答
(https?:)?//?[^\\\'\"<>]+?\\.(jpg|jpeg|gif|png)
解决方法
有很多用于匹配URL的临时正则表达式,但是据我所知,它们都没有声称完全可靠。但是,这将尝试满足您的条件。
根据[1],有效的URL字符(不保留)是字母数字和符号
$-_.+!*\'(),
。但是,也有保留字符,即[2]简明地给出的ѭ2字符-我在大部分RFC中都找不到列表。我知道还有其他用于查询字符串的字符,即ѭ3so,因此需要包含在内。然后,您遇到了一个问题,即并非每个人都正确地编码了他们的URL字符,因此在其他内容中可能会出现空格(我不知道如何解释,因为浏览器如何自动更正这些内容可能会令人迷惑)。
因此,您可能只是假设URL中可以包含任何内容,但仅仅是它必须以特定的内容开头并以特定的内容(您提供的内容)结尾,但这仍然是不可靠的。
@(https?:)?//?[^\'\"<>]+?\\.(jpg|jpeg|gif|png)@
, (?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\.(?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))?