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,则会得到一个与您quote
stringd相匹配的Pattern
。
\Q
和\E
标记string引用部分的开头和结尾。
正则expression式经常与正常string冲突。 说我想要一个正则expression式来search只有在运行时已知的某个string。 我们如何确定string没有正则expression式,例如( ".*.*.*"
)? 我们引用它。