我需要转发^
,.
,[
,]
,+
和\
等字符(标签和换行符赢了)这是一个问题),同时留下*
和?
等其他人。
EDIT =更具体地说,我有一个包含这些字符的字符串,我需要将它们转义,以便它们不与正则表达式匹配。我需要在每个字符前加\
,但单独执行此操作需要7或8次扫描,我想在一次传递中完成(IE:匹配的任何内容都以{{1}为前缀})
我该怎么做?
感谢。
答案 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)
您可以通过将\
添加到要转义的角色来实现此目的。