Java 正则表达式不适用于特殊字符

标签 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())

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

最佳答案

. 字符通常只匹配除换行符之外的所有字符。因此,如果 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/

相关文章:

java - Retrofit2,我如何转换具有不同对象名称但相同数据类型的响应

regex - 在某个字符串中查找多个单词的正则表达式

java - 如何在 Java 中将正则表达式与美元金额和短语相匹配?

java - 使用 jsoup 连接到 URL 时出现异常

java - 一些类没有打包成jar并带有依赖

java - 将 Sysout 值路由到 JTextArea

regex - 如何否定反向引用正则表达式

java - Ebean 在创建 JAR 后找不到实体

java - JAVA中使用扫描仪和多个分隔符从文本文件中读取数据

Java如何仅更改字段分隔符而不更改实际数据