3

我想引用一段字符串以在更大的正则表达式中被视为文字字符串,并且该表达式需要符合POSIX 扩展正则表达式格式。

这个问题与这个现有问题非常相似,除了那里的答案不让我满意,因为它建议我使用Pattern.quote(),它依赖于特殊\Q\E标记 - Java 正则表达式支持但符合 POSIX 扩展格式。

例如,我想one.two成为one\.two而不是\Qone.two\E

4

2 回答 2

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();
}
于 2011-03-01T08:50:57.687 回答
2

布赖恩的答案可以简化为

String toBeEscaped = "\\{}()[]*+?.|^$";
return inString.replaceAll("[\\Q" + toBeEscaped + "\\E]", "\\\\$0");

仅测试过"one.two"

于 2011-03-01T11:57:58.260 回答