我的解析器出现问题。我想阅读网站上的图像链接,这通常工作正常。但今天我得到了一个包含特殊字符的链接,而通常的正则表达式不起作用。
这就是我的代码的样子。
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)
。
In dotall mode, the expression . matches any character, including a line terminator. By default this expression does not match line terminators.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html#DOTALL
关于Java 正则表达式不适用于特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622123/