我正在尝试使用以下代码来理解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,可用于创建Pattern,将匹配字符串s,就像它是一个文字模式一样。输入序列中的元字符或转义序列将不会被赋予任何特殊含义。
但Pattern.quote的返回类型是String而不是已编译的Pattern对象。
为什么需要该方法,有哪些用法示例?
someString.matches(Pattern.quote(someLiteral))
的正确等价表达实际上是someString.matches("\\Q" + someLiteral.replace("\\E", "\\E\\\\E\\Q") + "\\E")
。 - kbolino"\\Q\\E".matches(Pattern.quote("\\Q\\E")) // true
。 - Bohemian\Q
(排除)到下一个\E
(排除)的所有内容,其中可能包括任意数量的\Q
序列。 - Bohemian