3

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

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

谢谢你的时间。

4

3 回答 3

5

问题是matches("^([A-Z]):"))因为String#matches匹配的完整输入不仅仅是它的一部分。

试试这个,让它匹配整行:

if (!arcvalFileFormBean.getTxtFileReview().matches("((?i)(?s)[A-Z]):.*")) {

PS: ^也不$需要锚点,String#matches因为这是隐含的。

  • (?i)=> 忽略大小写
  • (?s)=> DOTALL (mase DOT 也匹配新行)
于 2014-02-03T16:30:15.213 回答
5

matches() 测试整个字符串是否与正则表达式匹配。所以A:会匹配,但不会A:\blabla(也a:不会)。

正则表达式应该类似于

^([A-Za-z]):.*$
于 2014-02-03T16:30:28.433 回答
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
}
于 2014-02-03T16:32:46.873 回答