Pattern.quote方法有什么用?

我试图了解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在这里? 文档说明说:

返回指定String的文字模式String

这个方法产生一个String ,可以用来创build一个与strings匹配的Pattern ,就好像它是一个字面模式。

input序列中的元字符或转义序列将没有特别的含义。

但是Pattern.quote的返回types是String而不是编译的Pattern对象。

为什么这个方法是必需的,什么是一些用法的例子?

\Q意思是“文字开始”(即正则expression式“公开报价”)
\E “文字结尾”(即正则expression式“close quote”)

调用Pattern.quote()方法包装\Q...\E的string,从而将文本转换为正则expression式。 例如, Pattern.quote(".*")会匹配一个点,然后匹配一个星号:

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

该方法的目的是不要求程序员必须记住特殊的术语\Q\E并添加一些可读性的代码 – 正则expression式已经够难读了。 比较:

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

参考javadoc :

返回指定String的文字模式String。

这个方法产生一个String,可以用来创build一个与strings匹配的Pattern,就好像它是一个字面模式。

input序列中的元字符或转义序列将没有特别的含义。

Pattern.quote方法引用正则expression式模式的一部分,使正则expression式将其解释为string文字。

假设您在search程序中有一些用户input,并且您想对其进行regex。 但是这个input可能有不安全的字符,所以你可以使用

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

这个方法并没有引用一个Pattern但是正如你所指出的那样,在正则expression式中引用了一个String

\Q\E等等,都在java.util.regex.Pattern Javadoc页面上详细logging。 他们的意思是“开始Q uote”,“End quote”,并且指明了所有字符都有字面含义的区域。 使用Pattern.quote返回的方法是将其提供给Pattern.compile或接受模式string的任何其他方法,例如String.split

如果编译由Pattern.quote返回的string,则会得到一个与您quotestringd相匹配的Pattern

\Q\E标记string引用部分的开头和结尾。

正则expression式经常与正常string冲突。 说我想要一个正则expression式来search只有在运行时已知的某个string。 我们如何确定string没有正则expression式,例如( ".*.*.*" )? 我们引用它。