JAVA中正则表达式的二次转义

需求:格式化金额,替换服务器返回的格式化字符串中的"{0}"为金额

public class Test {
	public static void main(String[] args) {
        
        String unformattedMoney = "12.00";
        
		String s = "${0}";

        String regex = "\\{0\\}";

        s = s.replaceAll(regex, unformattedMoney);
        
        System.out.println(s);

	}
}

执行结果

$12.00

正则表达式中{}这样的字符有特殊的意义,所以需要写成\{。但是\本身也是具有特殊意义的转义字符,所以\就需要写成\\{。需要先对\进行一次转义

所谓特殊字符,就是一些有特殊含义的字符,例如runoo*b 中的*,正常情况下这个正则表达式可以匹配 runob、runoob、runoooooob 等,*号代表字符出现0到多次。但是如果要查找字符串中的*符号,则需要对*进行转义,即在其前加一个\runo\*ob 匹配 runo*ob

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\放在它们前面。下表列出了正则表达式中的特殊字符

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

你可能感兴趣的:(Java从入门到跑路)