我有一个片段
public static void main(String[] args) {
// replacement text
String replacement = "Not Set";
// text
String text = "Item A \(XXX\) Lock"; // text is "Item A(XXX)Lock"
String regex = "\(XXX\)"; // regex is "(XXX)"
// result text
String resultText = text.replaceAll(regex, replacement);
System.out.println("Result text: " + resultText);
}
结果文本是"项目 A \(XXX\) 锁定" -> 我无法将"\(XXX\)"替换为"未设置"。
如果您知道此问题,请帮助我。
正则表达式语言在 Java 字符串文字转义序列之上有自己的转义序列。因此,要匹配反斜杠,您需要在正则表达式中\
,从而在 Java 字符串文本中\\
在这种情况下,您也可以使用 Pattern.quote
text.replaceAll(Pattern.quote(regex), Matcher.quoteReplacement(replacement));
字符、
(
和)
在正则表达式中使用时都具有特殊含义。 但是您不想将它们与它们的特殊含义一起使用,这意味着您必须在正则表达式中转义它们。 这意味着在它们前面加上,告诉正则表达式处理器不要调用这些字符的特殊含义。
换句话说,包含\
的正则表达式将匹配,一个正则表达式包含
(
将匹配(
依此类推。
为了匹配(XXX)
,你想要的正则表达式将是\(XXX\)
- 看看你想要匹配的每个、
(
和)
都有一个额外的。 但是要在 Java
String
文字中指定此正则表达式,您需要编写\
来代替每个。 也就是说,你需要写
"\\\(XXX\\\)"
. 每个小运行中有六个字符。
String regex = "\\\(XXX\\\)";
String resultText = text.replaceAll(regex, replacement);