java中是否有任何方法可以选择性地转义几个特殊字符

时间:2017-01-31 07:27:06

标签: java regex

我有一个存储在文本文件中的模式,我正在从文件中读取并使用该模式来匹配字符串。

示例:/abc/def[\d]/ghi

现在我希望它与/abc/def[1]/ghi/abc/def[2]/ghi

相匹配

如果我使用Pattern.quote(“/ abc / def [\ d] / ghi”),它会将整个输入视为Literal,因此只有它匹配的字符串是“/ abc / def [\ d] / GHI“

所以我必须将模式保存在/abc/def\[\d\]/ghi这样的文件中,这样我就失去了可读性。

有没有办法专门逃避几个字符,比如在我的情况下,我希望'\ d'具有特殊含义,但不希望'[]'具有特殊含义。

2 个答案:

答案 0 :(得分:1)

为了获得所需的匹配,您的模式必须看起来像

varx

最后。但是为了使事情更具可读性,可以考虑使用方法来构建这样的模式表达式,而不是将它们硬编码为文字,例如:

\[\d\]
例如,

。是的,这意味着需要阅读更多文本,但假设您花了一些时间来提出好的方法名称,这可以使您的模式定义更易于阅读/理解。

甚至可以更进一步创建一些" RegexBuilder"提供一组很好的这种方法的类;允许流畅的界面。

答案 1 :(得分:1)

转出括号:

/abc/def\[\d\]/ghi

更新:

为避免转义输入文件中的括号,您可以在读取它们后将其转义:

public String escapeSquareBrackets(String e) {
    return e.replaceAll("([\\[\\]])", "\\$1");
}