Pattern.quote 方法有什么用?

2022-08-31 14:33:11

我试图使用以下代码来理解:Pattern.quote

String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545");
System.out.println("Pattern is : "+pattern);

产生输出:

Pattern is : \Q1252343% 8 567 hdfg gf^$545\E

这里和这里是什么?文档描述说:\Q\E

返回指定 的文本模式。StringString

此方法生成一个,该方法可用于创建与字符串匹配的字符串,就好像它是文本模式一样。StringPatterns

输入序列中的元字符或转义序列将不具有特殊含义。

但是 的返回类型不是编译的对象。Pattern.quoteStringPattern

为什么需要此方法,有哪些用法示例?


答案 1

\Q表示“文字文本的开头”(即正则表达式“开放引号”)
表示“文字文本的结束”(即正则表达式“关闭引号”)\E

调用该方法会将字符串包装在 中,这会将文本转换为正则表达式文本。例如,将匹配一个点,然后匹配一个星号:Pattern.quote()\Q...\EPattern.quote(".*")

System.out.println("foo".matches(".*")); // true
System.out.println("foo".matches(Pattern.quote(".*"))); // false
System.out.println(".*".matches(Pattern.quote(".*"))); // true

该方法的目的是不要求程序员必须记住特殊术语,并为代码添加一些可读性 - 正则表达式已经很难阅读。比较:\Q\E

someString.matches(Pattern.quote(someLiteral));
someString.matches("\\Q" + someLiteral + "\\E"));

引用 javadoc

返回指定字符串的文本模式字符串。

此方法生成一个 String,该字符串可用于创建与字符串 s 匹配的模式,就好像它是文本模式一样。

输入序列中的元字符或转义序列将不具有特殊含义。


答案 2

该方法引用正则表达式模式的一部分,以使正则表达式将其解释为字符串文本。Pattern.quote

假设您在搜索程序中有一些用户输入,并且想要为其使用正则表达式。但此输入可能包含不安全的字符,因此您可以使用

Pattern pattern = Pattern.compile(Pattern.quote(userInput));

此方法不引用 a,但正如您所指出的,将 a 括在正则表达式引号中。PatternString