如何在java中转义某些字符

时间:2011-10-14 19:00:19

标签: java regex escaping

我需要转发^.[]+\等字符(标签和换行符赢了)这是一个问题),同时留下*?等其他人。

EDIT =更具体地说,我有一个包含这些字符的字符串,我需要将它们转义,以便它们不与正则表达式匹配。我需要在每个字符前加\,但单独执行此操作需要7或8次扫描,我想在一次传递中完成(IE:匹配的任何内容都以{{1}为前缀})

我该怎么做?

感谢。

5 个答案:

答案 0 :(得分:6)

这会有用吗?

StringBuilder sb = new StringBuilder();
for (char c : myString.toCharArray())
{
    switch(c)
    {
        case '[':
        case ']':
        case '.':
        case '^':
        case '+':
        case '\\':
            sb.append('\\');
            // intended fall-through
        default:
            sb.append(c);
    }
}
String escaped = sb.toString();

答案 1 :(得分:1)

有一个应用程序:Pattern.quote()

它逃脱了任何被认为是正则表达式模式语言的东西。

答案 2 :(得分:0)

要转义String以用作正则表达式中的文字,可以使用Pattern.quote()

或仅使用\\Q\\E围绕字符串。

答案 3 :(得分:0)

\ Q和\ E以及java.util.Pattern.quote()是相同的方法。

但是,这种方法仅适用于正则表达式的一部分。

查看以下链接,您会看到15种口味中的4种支持它。因此,如果您需要在Java以外的任何其他方式执行正则表达式,例如javascript(使用ECMA),那么最好使用Grodriguez的方法。

http://www.regular-expressions.info/refflavors.html

这是一个可能有用的单行。

"text to escape".replaceAll("([\\\\\\[\\]\\.\\^\\+])","\\\\$1");

答案 4 :(得分:-1)

您可以通过将\添加到要转义的角色来实现此目的。