正则表达式换行符匹配问题
一、问题
在工作中处理BUG时发现是因为正则匹配没有成功,最后分析是因为测试使用的输入内容中包含了换行符。
- 模拟场景
业务上需要判断输入表达式中是否有指定的格式,如果有则需要调用相应的方法解析。
String regex = ".*\\$\\{\\s*user\\..+?\\s*\\}.*";
String expression = FileUtils.readFileToString(new File("G:/demo/content.txt"), "UTF-8");
System.out.println(expression.matches(regex));//false
System.out.println(expression.replaceAll("\r\n", "").matches(regex));//true
- 表达式内容
content.txt
中的文件内容如下,此内容为模拟内容,业务上使用的表达式内容比较多,不容易看出里面包含换行。
查询到:${user.name} 的 ${user.billno} 还未处理,请尽快处理。
过期时间:${time}
- 运行结果
fasle
true
二、解决办法
使用Pattern和Matcher来检查输入中是否包含指定格式的表达式:
Pattern pattern = Pattern.compile("\\$\\{\\s*user\\..+?\\s*\\}");
Matcher matcher = pattern.matcher(expression);
if(matcher.find()){
//do something
}