我无法让这个简单的正则表达式工作。我需要检查文件路径是否包含驱动器号,如果它没有抛出异常。
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
测试代码时,它失败了,而它应该通过。当我在没有驱动器盘符但完整路径的情况下测试它时,它失败了。我的正则表达式有问题。我尝试了几种不同的正则表达式,但没有任何效果。
感谢您的宝贵时间。
最佳答案
问题是 matches("^([A-Z]]):"))
因为 String#matches
匹配了完整的输入,而不仅仅是它的一部分。
试试这个,让它匹配整行:
if (!arcvalFileFormBean.getTxtFileReview().matches("((?i)(?s)[A-Z]):.*")) {
PS: ^
和 $
anchor 在 String#matches
中也不是必需的,因为这是隐式的。
(?i)
=> 忽略大小写(?s)
=> DOTALL(让 DOT 也匹配新行)
关于java - 提取驱动器号,java正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532497/