【问题标题】:Regex or another way to extract full URLs + relative URLs from HTML正则表达式或从 HTML 中提取完整 URL + 相对 URL 的其他方式
【发布时间】:2017-03-07 23:16:36
【问题描述】:

所以我有一个 SharePoint 网站,并且我有将新项目提交到 SharePoint 列表中的用户。列表项中的某些字段包含引用文件或图像的 URL,例如"http://host/abc.jpg""/abc.jpg"

在另一个字段中,用户编辑可能包含任何标签的 HTML 代码,例如<a href="/abc.jpg"><img src="/abc.jpg"> 等。

我的目标是查找包含链接/URL 的字段,并提取那些指向具有文件名和扩展名的内容的 URL。我可以使用这两个正则表达式从可能包含一些不相关信息或 URL(和仅 URL)的 SharePoint 字段中提取它:

//this will match full url e.g. http://localhost/path/a.jpg
var fullUrlRegex = 
            new Regex(@"^https?:\/\/(?:.*)[\.]+(?:[a-z0-9]{1,4})$");
//this will match an absolute path like //test/files to upload/222.jpg
var absolutePathRegex =
            new Regex(@"^\/.*[\.]+(?:[a-z0-9]{1,4})$");

var fullUrlRegexMatch = fullUrlRegex.Match(value);
var absolutePathRegexMatch = absolutePathRegex.Match(value);

//now check which one matched and save the value

但是,我不确定如何从用户在另一个字段中输入的 HTML 代码中提取 URL(包括相对 URL 和完整 URL)。

假设这是用户的输入,我需要从该 HTML 代码中提取两个文件的链接。

<p>This is a <a href="/abc.jpg">picture</a>! 
And this is a pic too: <img src="/abc.jpg"></p>

标签可以是任何东西,不仅限于&lt;a&gt;&lt;img&gt;。我认为可以解决此问题的一种方法是使用 HTML Agility Pack,但这似乎有点矫枉过正。正则表达式搜索src="(match this)"href="(match this)" 就足够了吗?有什么我可能会错过的吗?

【问题讨论】:

    标签: c# regex parsing html-parsing


    【解决方案1】:

    您的正则表达式不应包含开头的 ^ 和结尾的 $。这是一个锚。请参阅:https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

    同样使用 Matches 方法获取所有匹配项。

    【讨论】:

      【解决方案2】:

      试试这个正则表达式

      (?<=(href="|src="))[/]*(?:[A-Za-z0-9-._~!$&'()*+,;=:@]|%[0-9a-fA-F]{2})*(?:/(?:[A-Za-z0-9-._~!$&'()*+,;=:@]|%[0-9a-fA-F]{2})*)*
      

      只需将任何其他有效标签添加到 (href="|src=") 中的列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2010-10-04
        • 2017-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多