如何在Java中为POSIX Extended格式转义正则表达式文本

时间:2011-02-26 15:54:57

标签: java regex posix-ere

我想在一个较大的正则表达式中引用一段字符串作为文字字符串,该表达式需要符合POSIX Extended Regular Expressions格式。

这个问题与this existing question非常相似,不过那里的答案并不令我满意,因为它建议我使用Pattern.quote(),它依赖于特殊\Q和{{1}标记 - Java正则表达式支持这些标记,但符合POSIX扩展格式。

例如,我希望\E成为one.two而不是one\.two

2 个答案:

答案 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"进行测试。