一. 知识储备
1. 在Java中,如果想用字符串表示一个反斜线,则需要使用"\\"。直接使用"\"会报错。
原因在于: java编译器会误以为\是用来转义后面跟着的"符号。
2. 在Java正则表达式中,如果想匹配一个反斜线,则需要使用"\\\\",这是因为在正则匹配时,也会主动剥离一层转义字符。即
"\" -> "\\" -> "\\\\" 这样的转换过程。
3. 在Mysql中,如果想在查询条件中带上一个反斜线,则需要使用"\\\\"。这是因为反斜线在Mysql中也是转义字符,因此在语法解析时会进行一次转义。而当进行匹配时,同样用到了正则,又会剥离一次,最终与java的正则表达式一样,需要"\\\\"来表示一个反斜线。
二. 应用
以Spring boot starter web为例,当controller层接收到含有一条反斜线的属性(或字符串)参数后,会像下图所示:
但实际上如果我们写测试用例模拟时,此处等价于
此处,我对该参数做了模糊查询,因此按照如下写法:
scheduleEventVO.setDescription(scheduleEventVO.getDescription().replaceAll("\\\\", "\\\\\\\\"));
criteria.andLike("description", StringUtils.stringLike(scheduleEventVO.getDescription()));
目的是匹配每一条反斜线,替换成"\\",供Mysql查询。