我想引用一段字符串以在更大的正则表达式中被视为文字字符串,并且该表达式需要符合POSIX 扩展正则表达式格式。
这个问题与这个现有问题非常相似,除了那里的答案不让我满意,因为它建议我使用Pattern.quote()
,它依赖于特殊\Q
和\E
标记 - Java 正则表达式支持但不符合 POSIX 扩展格式。
例如,我想one.two
成为one\.two
而不是\Qone.two\E
。
我想引用一段字符串以在更大的正则表达式中被视为文字字符串,并且该表达式需要符合POSIX 扩展正则表达式格式。
这个问题与这个现有问题非常相似,除了那里的答案不让我满意,因为它建议我使用Pattern.quote()
,它依赖于特殊\Q
和\E
标记 - Java 正则表达式支持但不符合 POSIX 扩展格式。
例如,我想one.two
成为one\.two
而不是\Qone.two\E
。
也许是这样的:
// 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();
}
布赖恩的答案可以简化为
String toBeEscaped = "\\{}()[]*+?.|^$";
return inString.replaceAll("[\\Q" + toBeEscaped + "\\E]", "\\\\$0");
仅测试过"one.two"
。