Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能。
下面是个例子:
import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class TestPattern { @Test public void testQuote(){ List<String> stringList = new ArrayList<>(); stringList.add("Hi123HitianHiyan"); stringList.add("Hiaaa"); stringList.add("aaa"); stringList.add("Hi\/*"); stringList.add("Hi\w*123"); stringList.add("Hi\w*"); final String patternString = "Hi\w*"; //根据patternString正则表达式匹配数组 System.out.println("---patternString---"); for (String string : stringList){ if(Pattern.matches(patternString, string)){ System.out.println(string); } } System.out.println("---quote---"); String quote = Pattern.quote(patternString); System.out.println("patternString:"+quote); for (String string : stringList){ if(Pattern.matches(quote, string)){ System.out.println(string); } } } }
执行之后,结果如下:
可以看到,正则表达式"Hi\w*"匹配以"Hi"开头的后面任意个数字、字母、下划线、汉字;
然后使用了Pattern.quote("Hi\w*")后,该方法的返回值就是"QHi\w*E",这就是表示一个字符串常量"Hi\w*",不具有原来正则表达式的功能,只匹配该字符串常量。
场景
接口接收一个参数name,模糊查询时只想要匹配name的字符串,这是接收到这个参数就可以使用name = Pattern.quote(name),用处理后的name去查询。