【发布时间】:2015-03-06 11:34:51
【问题描述】:
我有以下正则表达式,可以使用 java.util.regex 从 HTML 文档中提取链接
<a\s.*?href=([^ >]+).*?<img\s.*?src=([^ ]+)(.*?>.*?<\/a>)
并怀疑它与此标记中的最后一个链接相匹配。
<font size="4">Mail : </font><a href="mailto:c.bantz@pgt-gmbh.com"><u><font size="4" color="#0000ff">s.weber@pgt-gmbh.com</font></u></a><br />
<br />
<font size="4">Internet : </font><a href="http://www.pgt-gmbh.com/"><u><font size="4" color="#0000ff">http://www.pgt-gmbh.com</font></u></a><font size="4"> </font><br />
<br />
<br />
<font size="4"> </font><a class="domino-attachment-link" style="display: inline-block; text-align: center" href="/_dv/_dv/documents_DE.nsf/0/7fadd8be280a2e34c1257dfd00307098/$FILE/Anfrage.pdf" title="Anfrage.pdf"><img src="/_dv/_dv/documents_DE.nsf/0/7fadd8be280a2e34c1257dfd00307098/f_Text/0.5F66?OpenElement&FieldElemFormat=gif" width="32" height="32" alt="Anfrage.pdf" border="0" /> - Anfrage.pdf</a>
但它与链接不匹配,而是执行类似于贪婪搜索的操作,从 mailto: 开始并以最后一个链接结束。相同的表达式适用于http://regex101.com 中的正则表达式测试器。
有什么提示吗?
【问题讨论】:
-
再次转义反斜杠。
-
使用 HTML 解析器不是更容易吗?
-
如果转义是问题所在,java 将无法编译。事实上,即使是 eclipse 也能正确找到正则表达式,但 java 不能。
-
转义反斜杠不是问题。我刚刚删除了它们以提供可在 RegEx 测试器中测试的解决方案。 @stefanA 你是如何在 Eclipse 中测试它的?