我的解析器有问题。我想阅读网站上的图片链接,这通常可以正常工作。但是今天,我得到了一个包含特殊字符的链接,而常规的正则表达式不起作用。
这就是我的代码的样子。
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$&$image=is{TNM/1098845000_prod_001}&$ausverkauft=1&$0prozent=1&$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())
但是结果是一样的:没有发现任何东西。
该.字符通常只匹配换行符 以外的所有 字符。因此,如果img标签中包含换行符,则您的模式将不匹配。
.
使用Pattern.compile(..., Pattern.DOTALL)或在模式之前加上(?s)。
Pattern.compile(..., Pattern.DOTALL)
(?s)
在dotall模式下,表达式。匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html#DOTALL