替换 Java 中的确切字符串,假设它可能包含特殊的正则表达式字符
replacing exact string in Java assuming it may contain special regex characters
我有一个字符串输入和字符串模式,假设它们可以包含所有类型的对正则表达式有特殊意义的字符,我希望在不对特殊字符给予任何特殊考虑的情况下进行精确的单词替换.应忽略任何特殊含义。 而且在编译时我不知道输入字符串或输入模式中可能存在多少这样的特殊字符。
所以这里是正式的问题陈述:-
假设对象input_string是String类型的输入。
然后我们有另一个字符串 input_pattern 也是一个 String 类型的对象。
现在我要执行以下操作:-
String result=input_string.replaceFirst(input_pattern,"replacewithsomethingdoesntmatter");
替换应该以 'exact' 匹配方式进行,如果字符串中存在字符,则不考虑字符的任何正则表达式特殊含义。如何实现?
可以使用Pattern.quote()
方法对正则表达式中有特殊含义的字符进行转义:
String pattern = "^(.*)$";
String quotedPattern = Pattern.quote(pattern);
System.out.println(quotedPattern);
这会将模式包裹在引号(\Q
和 \E
)中,表明包裹的序列需要按字面意思匹配。
或者,您可以手动将模式用引号引起来:
String pattern = "^(.*)$";
String quotedPattern = "\Q" + pattern + "\E";
System.out.println(quotedPattern);
第一种方法可能更安全,因为它还会为已经包含引号的表达式提供便利。
我有一个字符串输入和字符串模式,假设它们可以包含所有类型的对正则表达式有特殊意义的字符,我希望在不对特殊字符给予任何特殊考虑的情况下进行精确的单词替换.应忽略任何特殊含义。 而且在编译时我不知道输入字符串或输入模式中可能存在多少这样的特殊字符。
所以这里是正式的问题陈述:-
假设对象input_string是String类型的输入。 然后我们有另一个字符串 input_pattern 也是一个 String 类型的对象。
现在我要执行以下操作:-
String result=input_string.replaceFirst(input_pattern,"replacewithsomethingdoesntmatter");
替换应该以 'exact' 匹配方式进行,如果字符串中存在字符,则不考虑字符的任何正则表达式特殊含义。如何实现?
可以使用Pattern.quote()
方法对正则表达式中有特殊含义的字符进行转义:
String pattern = "^(.*)$";
String quotedPattern = Pattern.quote(pattern);
System.out.println(quotedPattern);
这会将模式包裹在引号(\Q
和 \E
)中,表明包裹的序列需要按字面意思匹配。
或者,您可以手动将模式用引号引起来:
String pattern = "^(.*)$";
String quotedPattern = "\Q" + pattern + "\E";
System.out.println(quotedPattern);
第一种方法可能更安全,因为它还会为已经包含引号的表达式提供便利。