Pra*_*eek 53 java regex pattern-matching
我试图理解Pattern.quote使用以下代码:
String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545");
System.out.println("Pattern is : "+pattern);
Run Code Online (Sandbox Code Playgroud)
产生输出:
Pattern is : \Q1252343% 8 567 hdfg gf^$545\E
Run Code Online (Sandbox Code Playgroud)
什么是\Q和\E这里?文档说明说:
返回
String指定的文字模式String.此方法生成一个
String可用于创建Pattern与字符串匹配的字符s,就好像它是文字模式一样.输入序列中的元字符或转义序列将没有特殊含义.
但是Pattern.quote返回类型是String而不是编译Pattern对象.
为什么需要此方法以及一些用法示例?
Boh*_*ian 69
\Q表示"文字文本的开头"(即正则表达式"公开引用")
\E表示"文字结尾"(即正则表达式"密切引用")
调用该Pattern.quote()方法将字符串包装进去\Q...\E,将文本转换为正则表达式文字.例如,Pattern.quote(".*")匹配一个点,然后是星号:
System.out.println("foo".matches(".*")); // true
System.out.println("foo".matches(Pattern.quote(".*"))); // false
System.out.println(".*".matches(Pattern.quote(".*"))); // true
Run Code Online (Sandbox Code Playgroud)
该方法的目的是不要求程序员必须记住特殊术语\Q,\E并为代码添加一些可读性 - 正则表达式已经足够难以读取.相比:
someString.matches(Pattern.quote(someLiteral));
someString.matches("\\Q" + someLiteral + "\\E"));
Run Code Online (Sandbox Code Playgroud)
参考javadoc:
返回指定String的文字模式String.
此方法生成一个String,该String可用于创建与字符串s匹配的Pattern,就好像它是文字模式一样.
输入序列中的元字符或转义序列将没有特殊含义.
Bor*_*der 16
该Pattern.quote方法引用正则表达式模式的一部分,使正则表达式将其解释为字符串文字.
假设您的搜索程序中有一些用户输入,并且您想要正确使用它.但是这个输入可能有不安全的字符,所以你可以使用
Pattern pattern = Pattern.compile(Pattern.quote(userInput));
Run Code Online (Sandbox Code Playgroud)
这个方法没有引用,Pattern但正如你所指出的那样,包含一个String正则表达式的引号.
\Q并且\E,在所有其他方面,在java.util.regex.Pattern Javadoc页面上进行了详细记录.他们的意思是"开头Q uote"," ê次报价"和丹麦,所有的字符具有字面意义的区域.使用return的方法Pattern.quote是将其提供给Pattern.compile,或者接受模式字符串的任何其他方法,例如String.split.