我正在尝试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这里?文档说明中说:
\Q
\E
返回String指定的文字模式String。 此方法产生一个String,可用来创建一个Pattern与字符串相匹配的,就s好像它是文字模式一样。 输入序列中的元字符或转义序列将没有特殊含义。
返回String指定的文字模式String。
String
此方法产生一个String,可用来创建一个Pattern与字符串相匹配的,就s好像它是文字模式一样。
Pattern
s
输入序列中的元字符或转义序列将没有特殊含义。
但是Pattern.quote的返回类型String不是编译Pattern对象。
为什么需要此方法?使用示例有哪些?
\Q表示“文字文本的开始”(即正则表达式“开引号”) \E表示“文字文本的结束”(即正则表达式“闭引号”)
调用该Pattern.quote()方法将在\Q...\E其中包装字符串,这会将文本转换为正则表达式 文字 。例如,Pattern.quote(".*")将匹配一个点然后一个星号:
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
该方法的目的是不需要程序员记住特殊术语\Q并\E为代码增加一点可读性-正则表达式已经很难阅读。比较:
someString.matches(Pattern.quote(someLiteral)); someString.matches("\\Q" + someLiteral + "\\E"));
引用javadoc:
返回指定字符串的文字模式字符串。 此方法产生一个String,该字符串可用于创建与字符串s相匹配的Pattern,就好像它是文字模式一样。 输入序列中的元字符或转义序列将没有特殊含义。
返回指定字符串的文字模式字符串。
此方法产生一个String,该字符串可用于创建与字符串s相匹配的Pattern,就好像它是文字模式一样。