从DB中提取的正则表达式与该值不匹配

时间:2015-06-03 15:12:12

标签: java mysql regex

简而言之:

String regExp = "\\w{3}-\\d{3}";
System.out.println("REF-123".matches(regExp)); // IS TRUE

// Exact same regular expression extracted from the database: \\w{3}-\\d{3}
regExp = resultSet.getString("regex");
System.out.println("REF-123".matches(regExp)); // IS FALSE

非常感谢任何帮助。

排序

转义前一个斜杠的java字符串中的双斜杠,但在DB中不需要用双斜杠保存。

2 个答案:

答案 0 :(得分:1)

字符串常量中的反斜杠符号(\)用于转义目的。

例如

System.out.println("A\\B");

将打印A\B。在您的数据库中,字符串必须是\w{3}-\d{3}

答案 1 :(得分:1)

这是一个想法。尝试:

System.out.println("\\www-\\ddd".matches(regularExpressionExtractedFromDB));

我们希望 true

字符串文字中需要双反斜杠,以使字符串包含单个反斜杠。第一个反斜杠是一个转义,第二个是被转义的字符。因此结果是一个反斜杠字符。

您从数据库获得的值必须是

\w{3}-\d{3}

等同于字符串文字“\\w{3}-\\d{3}”。来自数据库的值被解释为字符串文字,因此的反斜杠需要“转义”。

System.out.println("\\w{3}-\\d{3}");