所以我有一个SharePoint网站,我有用户将新项目提交到SharePoint列表中。列表项中的某些字段包含引用文件或图像的URL,例如"http://host/abc.jpg"
或"/abc.jpg"
。
在其他字段中,用户编辑HTML代码,其中可能包含<a href="/abc.jpg">
,<img src="/abc.jpg">
等任何标记。
我的目标是查找包含链接/网址的字段,并提取指向具有文件名加扩展名的网址的网址。我没有问题从SharePoint字段中提取它,这些字段可能包含一些不相关的信息或使用这两个正则表达式的URL(以及仅限URL):
//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>
标签可以是任何内容,不仅限于<a>
和<img>
。我认为可以解决这个问题的一种方法是使用HTML Agility Pack,但这似乎有些过分。正则表达式搜索src="(match this)"
和href="(match this)"
是否足够?我可能会错过什么?
答案 0 :(得分:1)
试试这个正则表达式
(?<=(href="|src="))[/]*(?:[A-Za-z0-9-._~!$&'()*+,;=:@]|%[0-9a-fA-F]{2})*(?:/(?:[A-Za-z0-9-._~!$&'()*+,;=:@]|%[0-9a-fA-F]{2})*)*
只需将任何其他有效标签添加到列表中(href =&#34; | src =&#34;)
答案 1 :(得分:1)
你的正则表达式不应该包含^的开头和$结尾。这是一个achor。请参阅:https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx。
还可以使用匹配方法获取所有匹配项。