转义正则表达式中的特殊字符
如果您需要将任意String
作为正则表达式模式并将其转义,使用Pattern.quote
:
根据API文档:
public static String quote(String s)
返回指定String
的字面模式String
。 此方法生成一个String
,可用于创建Pattern
,该模式将匹配字符串s
,就好像它是一个字面模式。
输入序列中的元字符或转义序列不会具有特殊含义。
参数: s
- 要转义的字符串
返回: 包含字面替换的字符串
这意味着你可以这样做:
String[] subDirs = path.split(Pattern.quote(File.separator))
将替换字符串文本化
如果你需要将任意的替换字符串文本化,可以使用Matcher.quoteReplacement
。
以下是该方法API的说明:
public static String quoteReplacement(String s)
返回指定字符串的字面替换字符串。此方法生成一个字符串,可作为 Matcher 类的 appendReplacement 方法中的字面替换 s。生成的字符串将匹配处理为字面序列的字符序列 s。斜杠('\')和美元符号('$')没有特殊含义。
参数: s - 要进行文本化的字符串
返回值: 字面字符串替换
这个被引用的替换字符串同样适用于String.replaceFirst
和 String.replaceAll
:
请注意,替换字符串中的反斜杠(\)和美元符号($)可能导致结果与其被视为文字替换字符串时不同。如果需要,可以使用 Matcher.quoteReplacement 来消除这些字符的特殊含义。
示例
System.out.println(
"O.M.G.".replaceAll(".", "!")
);
System.out.println(
"O.M.G.".replaceAll(Pattern.quote("."), "!")
);
System.out.println(
"Microsoft software".replaceAll("so", "$0")
);
System.out.println(
"Microsoft software".replaceAll("so", Matcher.quoteReplacement("$0"))
);