0

我的解析器有问题。我想阅读网站上的图片链接,这通常可以正常工作。但是今天我得到了一个包含特殊字符的链接,并且通常的正则表达式不起作用。

这就是我的代码的样子。

Pattern t = Pattern.compile(regex.trim());

Matcher x = t.matcher(content[i].toString());
if(x.find())
{
    values[i] = x.group(1);
}

这是html的一部分,会引起麻烦

<div class="open-zoomview zoomlink" itemscope="" itemtype="http://schema.org/Product"> 
<img class="zoomLink productImage" src="

http://tnm.scene7.com/is/image/TNM/template_335x300?$plus_335x300$&amp;$image=is{TNM/1098845000_prod_001}&amp;$ausverkauft=1&amp;$0prozent=1&amp;$versandkostenfrei=0" alt="Produkt Atika HB 60 Benzin-Heckenschere" title="Produkt Atika HB 60 Benzin-Heckenschere" itemprop="image" /> 
</div> 

这是我用来获取 src 属性中的部分的正则表达式:

<img .*src="(.*?)" .*>

我相信它与链接中的所有特殊字符有关。但我不确定如何逃脱所有这些。我已经试过了

Pattern.quote(content[i].toString())

但结果是一样的:什么也没找到。

4

4 回答 4

2

.字符通常只匹配换行符之外的所有内容。因此,如果 img-tag 中有换行符,您的模式将不匹配。

使用Pattern.compile(..., Pattern.DOTALL)或在您的模式前添加(?s).

在 dotall 模式下,表达式 . 匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html#DOTALL

于 2012-09-27T13:19:32.117 回答
0

您实际上应该使用<img\\s\\.*?\\bsrc=["'](\\.*?)["']\\.*?>with(?s)修饰符。

于 2012-09-27T13:14:44.330 回答
0

你的正则表达式应该是这样的:

String regex = "<img .*src=\"(.*?)\" .*>";
于 2012-09-27T13:21:21.493 回答
0

这可能是由标签中的换行引起的。这 。字符不会匹配它。

您是否考虑过不使用正则表达式来解析 HTML?使用正则表达式进行 HTML 解析是出了名的脆弱结构。请考虑为此使用解析库,例如 JSoup。

于 2012-09-27T13:22:24.600 回答