Java正则表达式Pattern.quote()方法详解

提出问题

通过正则表达式,提取下面字符串中,包含 美元+数字 的字符串,如下:

$100, $130, $150

提取的正则表达式:

$\d\d\d

完整代码如下:

String text = "$100, $130, $150";
String patternStr = "$100";
Matcher matcher = Pattern.compile(patternStr).matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group());
}

执行结果找不到字符串

分析问题

因为 $ 是正则表达式的符号之一,表示 匹配字符串的结束,详见链接

解决方法一

使用转移符号 \$,完整正则表达式:\\$\\d\\d\\d,完整代码如下:

String text = "$100, $130, $150";
String patternStr = "\\$\\d\\d\\d";
Matcher matcher = Pattern.compile(patternStr).matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group());
}

执行结果:

$100
$130
$150

缺点

需要手动转移,复杂正则表达式容易出错

解决

使用 Pattern.quote() 方法

Pattern.quote()

先看下面代码

String text = "$100, $130, $150";
String patternStr = Pattern.quote("$") + "\\d\\d\\d";
System.out.println("正则表达式:"+patternStr);
Matcher matcher = Pattern.compile(patternStr).matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group());
}

执行结果:

正则表达式:\Q$\E\d\d\d
$100
$130
$150

解释

Pattern.quote("$") 就是在字符串 $ 的前面加上 \Q,后面加上 \E,表示此 $ 是普通字符串,不是正则表达式

\Q、\E 解释

  • \Q:代表字面内容的开始
  • \E:代表字面内容的结束

参考:https://www.baeldung-cn.com/java-pattern-quote


原文出处:/show_1GW2AOgegRv5.html