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

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

感谢您的宝贵时间。

最佳答案

问题是 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/

相关文章:

java - 工具栏在RelativeLayout中消失

java - 如何使用 GridBagLayout() 将图像放入 jpanel 中?

java - 为什么 useTransparentBounds() 不在 Matcher 区域之外进行搜索?

javascript - Regex(正则表达式),替换javascript中出现的第二个

java - Java:正则表达式不匹配

Java 使用 Webflux 在 Springboot 中将 FilePart 转换为 byte[]

sql - 删除 BigQuery STRING 字段中的重叠子字符串

powershell - 从 iscsi 启动器名称获取 iscsi 映射驱动器号

c# - 如何从驱动器全名获取驱动器号

batch-file - 批处理文件和可变 USB 盘符