我有一个存储在文本文件中的模式,我正在从文件中读取并使用该模式来匹配字符串。
示例:/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'具有特殊含义,但不希望'[]'具有特殊含义。
答案 0 :(得分:1)
为了获得所需的匹配,您的模式必须看起来像
varx
最后。但是为了使事情更具可读性,可以考虑使用方法来构建这样的模式表达式,而不是将它们硬编码为文字,例如:
\[\d\]
例如,。是的,这意味着需要阅读更多文本,但假设您花了一些时间来提出好的方法名称,这可以使您的模式定义更易于阅读/理解。
甚至可以更进一步创建一些" RegexBuilder"提供一组很好的这种方法的类;允许流畅的界面。
答案 1 :(得分:1)
转出括号:
/abc/def\[\d\]/ghi
更新:
为避免转义输入文件中的括号,您可以在读取它们后将其转义:
public String escapeSquareBrackets(String e) {
return e.replaceAll("([\\[\\]])", "\\$1");
}