Java 将所有替换为具有正则表达式通配符的字符串
可能重复:Java 将所有替换为具有正则表达式通配符的字符串,java,regex,string,Java,Regex,String,可能重复: 我有一个字符串,需要替换它的某些部分。 但替换文本包含正则表达式通配符。例如: String target = "Something * to do in ('AAA', 'BBB')"; String replacement = "Hello"; String originalText = "ABCDEFHGIJKLMN" + target + "ABCDEFHGIJKLMN"; System.out.println(originalText.replaceA
我有一个字符串,需要替换它的某些部分。
但替换文本包含正则表达式通配符。例如:
String target = "Something * to do in ('AAA', 'BBB')";
String replacement = "Hello";
String originalText = "ABCDEFHGIJKLMN" + target + "ABCDEFHGIJKLMN";
System.out.println(originalText.replaceAll(target, replacement));
我得到:ABCDEFHGIJKLMN在('AAA','BBB')中要做的事ABCDEFHGIJKLMN
为什么不进行替换?String.replaceAll()
采用正则表达式,因此它试图扩展这些元字符
一种方法是转义这些字符(例如\*
)
另一种方法是使用并查找包含字符串的开头,自己进行替换indexOf()
不接受regexp,而是普通字符串。string.replaceAll()
接受正则表达式,因此它试图扩展这些元字符
一种方法是转义这些字符(例如\*
)
另一种方法是使用并查找包含字符串的开头,自己进行替换
indexOf()
不接受regexp,而是普通字符串。因为*
,(
和)
都是正则表达式中的元字符。因此,所有这些都需要逃脱。Java似乎有一种方便的方法:
java.util.regex.Pattern.quote(target)
但是,更好的选择可能是不使用regex使用
replaceAll
函数。然后您不需要转义任何内容。因为*
,(
和)
都是正则表达式中的元字符。因此,所有这些都需要逃脱。Java似乎有一种方便的方法:
java.util.regex.Pattern.quote(target)
但是,更好的选择可能是不使用regex使用
replaceAll
函数。那么你就不需要逃避任何事情。使用quote
我得到:ABCDEFHGIJKLMN\QHello\EABCDEFHGIJKLMN
。我怎样才能摆脱Q
?@Jim。。不,你不应该这样。它应该很好用。你是如何使用它的?我做到了:target=Pattern.quote(target);target=Pattern.quote(目标);字符串替换=“你好”;字符串originalText=“ABCDEFHGIJKLMN”+目标+“ABCDEFHGIJKLMN”;System.out.println(originalText.replaceAll(target,replacement))代码>@Jim这也会将转义的目标放在初始字符串中。当然,您只需要在将其用作正则表达式时对其进行转义。将target
保持原样,并将我答案中的片段输入replaceAll
。或者无论如何使用replace
。因为您这样做了两次target=Pattern.quote(target)
,做一次,它就会像@m.buettner说的那样工作。使用quote
我得到:ABCDEFHGIJKLMN\QHello\EABCDEFHGIJKLMN
。我怎样才能摆脱Q
?@Jim。。不,你不应该这样。它应该很好用。你是如何使用它的?我做到了:target=Pattern.quote(target);target=Pattern.quote(目标);字符串替换=“你好”;字符串originalText=“ABCDEFHGIJKLMN”+目标+“ABCDEFHGIJKLMN”;System.out.println(originalText.replaceAll(target,replacement))代码>@Jim这也会将转义的目标放在初始字符串中。当然,您只需要在将其用作正则表达式时对其进行转义。将target
保持原样,并将我答案中的片段输入replaceAll
。或者无论如何使用replace
。因为您这样做了两次target=Pattern.quote(target)代码>,做一次,它就会像@m.buettner说的那样工作。