提取驱动器号,java正则表达式

时间:2014-02-03 16:28:14

标签: java regex drive-letter

我无法让这个简单的正则表达式工作。我需要检查文件路径是否包含驱动器号,如果它没有抛出异常。

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测试代码时,它会失败,何时应该通过。当我在没有驱动器号的情况下测试它,但是它的完整路径失败了。我的正则表达式有问题。我尝试了一些不同的正则表达式但没有任何效果。

感谢您的时间。

3 个答案:

答案 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
}