使用正则表达式我想提取一些HTML文本中包含的文件或图像的所有链接。尝试了几个例子,但他们失败的原因很多(主要是我不熟悉正则表达式:))
1)首先我试过这个:
> Regex("<img[^>]+src=[""']([^""']+)[""']", RegexOptions.Singleline Or
> RegexOptions.IgnoreCase)
(适用于图像)
2)然后这个:
Regex("href=[""']([^""']+)[""']", RegexOptions.Singleline Or RegexOptions.IgnoreCase)
1)提取所有图像,它工作正常,但这只是部分解决方案。 2)提取所有href =“asdf”,但我想只提取指向文件的href,我不想要锚点(#middlesection)或.aspx甚至没有像href =“www.google.com/site”这样的扩展名的网址
我想知道如何从给定文本中提取所有文件,作为文件的任何以点和三个字符结尾的链接:)
我对“.aspx”或“.html”不感兴趣,既不像“id_content = 99”这样的无扩展名网址,也不喜欢“#anchor123”这样的锚点。
是否可以将其打包成一个RegExp?所有这一切背后的想法是我必须将某些HTML中引用的每个文件从一个地方复制到另一个地方,因此我需要一个仅包含要复制的文件路径的ArrayList。
提前致谢!
添加了一些示例代码,只是为了澄清这与“野外”html
无关提供此代码:
<p>This is a paragraph</p>
<br>
<a href="#someplace">Go to someplace</a>
<ul>
<li><p><a href="../files/document.pdf">Important PDF 1</a></p></li>
<li><p><a href="../files/document.xls">Important XLS</a></p></li>
</ul>
<a href="content.aspx?id_content=55">Go to content 55</a>
<br>
<img src="../images/nicelogo.jpg">
我想得到这个:
"../files/document.pdf"
"../files/document.xls"
"../images/nicelogo.jpg"
我不想得到这个:
"#someplace"
"content.aspx?id_content=55"
多数民众赞成,凭借我拥有的reg exp,我获得了所有链接,我只想要那些代表文件的链接。 HTML是由我手工编写的(长篇故事)所以不会有奇怪的双引号或格式错误的标签或奇怪的字符。
我知道它可以做,因为它差不多完成了,我只是不知道怎么说“给我只有匹配的东西”。最后的东西是“东西”三个长字符串“。我清楚了吗? :)
答案 0 :(得分:1)
根据您的示例,表达式的大部分内容不应与问号,片段哈希或双引号匹配:
"([^?#"]*)\.[a-z]{3,4}"
最后一部分是强制扩展一个3到4个字符,前面加一个句号。
修改强>
捕获双引号之间的部分:
"(([^?#"]*)\.[a-z]{3,4})"
不确定如何避免使用ASP在基本名称上捕获内存,在PCRE中你会使用?:
答案 1 :(得分:0)
您真的不想尝试自己解析网址。存在可以引用资源的各种格式。您可以src=foo
没有引号,src='foo'
,src="foo"
,您可以包含自己引用其他资源的样式表,您需要进行实体解码(src='f"oo'
)和URL编码(src='f o o'
),以及处理相对URL和绝对URL(您知道src='//somesite.com/blah'
与src='http://somesite.com/blah'
和src='somesite.com/blah'
不同吗?)等等。还有你提到的问题,可能还有更多我没有想过的问题。 StackOverflow上已经有很多问题,为什么尝试使用RegEx解析HTML是个坏主意,答案范围从the serious到humorous。
相反,为什么不使用已经解决问题的现有工具,例如wget?请参阅wget的recursive download支持,以关注链接并抓取网站以获取引用的资源。
答案 2 :(得分:0)
这样的事情应该有效:
<a href=\"(.*\.[a-z0-9]{3})\"
但是如果确实如此,你必须向我保证,当你后悔为此使用正则表达式时,你会回来发表评论。