Java Regex不适用于特殊字符

时间:2012-09-27 13:06:39

标签: java regex

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

这就是我的代码的样子。

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 个答案:

答案 0 :(得分:2)

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

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

  

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你的正则表达式应该是:

String regex = "<img .*src=\"(.*?)\" .*>";

答案 3 :(得分:0)

这可能是由标签内的换行引起的。的。角色不符合它。

您是否考虑过不使用正则表达式来解析HTML?使用正则表达式进行HTML解析是非常脆弱的构造。请考虑使用解析库,例如JSoup。