我无法让这个简单的正则表达式工作。我需要检查文件路径是否包含驱动器号,如果它没有抛出异常。
if (!arcvalFileFormBean.getTxtFileReview().matches("^([A-Z]):")) {
status = "MAPPING ERROR: Please submit a file from a mapped drive (i.e. K:\\).";
request.setAttribute(FairValConstants.status, status);
throw new InvalidFileMoveException(FairValConstants.MAKE_VALID_SELECTION);
}
当我使用此W:\testFolder\testfile_v1234_12_23_2014_1245.pfd
测试代码时,它会失败,何时应该通过。当我在没有驱动器号的情况下测试它,但是它的完整路径失败了。我的正则表达式有问题。我尝试了一些不同的正则表达式但没有任何效果。
感谢您的时间。
答案 0 :(得分:5)
问题是matches("^([A-Z]):"))
,因为String#matches
匹配完整输入而不只是其中的一部分。
尝试使其与全行匹配:
if (!arcvalFileFormBean.getTxtFileReview().matches("((?i)(?s)[A-Z]):.*")) {
PS: ^
和$
锚点在String#matches
中也不是必需的,因为这是隐含的。
(?i)
=>忽略大小写(?s)
=> DOTALL(mase DOT也匹配新线)答案 1 :(得分:5)
matches()测试整个字符串是否与正则表达式匹配。因此A:
会匹配,但不会A:\blabla
(而a:
也不匹配。
正则表达式应该类似于
^([A-Za-z]):.*$
答案 2 :(得分:0)
matches
检查整个字符串是否与正则表达式匹配。您要找的是来自find
班级的Matcher
。
Pattern p = Pattern.compile(yourRegex);//you can save it as static field to reuse this regex
if (p.matcher(yourInput).find()){
//do your job
}