我想在一个较大的正则表达式中引用一段字符串作为文字字符串,该表达式需要符合POSIX Extended Regular Expressions格式。
这个问题与this existing question非常相似,不过那里的答案并不令我满意,因为它建议我使用Pattern.quote()
,它依赖于特殊\Q
和{{1}标记 - Java正则表达式支持这些标记,但不符合POSIX扩展格式。
例如,我希望\E
成为one.two
而不是one\.two
。
答案 0 :(得分:3)
也许是这些方面的东西:
// untested
String escape(String inString)
{
StringBuilder builder = new StringBuilder(inString.length() * 2);
String toBeEscaped = "\\{}()[]*+?.|^$";
for (int i = 0; i < inString.length(); i++)
{
char c = inString.charAt(i);
if (toBeEscaped.contains(c))
{
builder.append('\\');
}
builder.append(c);
}
return builder.toString();
}
答案 1 :(得分:2)
Brian的答案可简化为
String toBeEscaped = "\\{}()[]*+?.|^$";
return inString.replaceAll("[\\Q" + toBeEscaped + "\\E]", "\\\\$0");
仅使用"one.two"
进行测试。