Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将所有替换为具有正则表达式通配符的字符串_Java_Regex_String - Fatal编程技术网

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说的那样工作。