Java reg exp匹配文件名的模式

时间:2015-05-04 20:27:46

标签: java regex

Pattern.compile("# Match a valid Windows filename (unspecified file system).    \n"
+ "^   # Anchor to start of string. \n"
+ "(?! # Assert filename is not: CON, PRN, \n"
+ "(?: # AUX, NUL, COM1, COM2, COM3, COM4, \n"
+ "CON|PRN|AUX|NUL| # COM5, COM6, COM7, COM8, COM9, \n"
+ "COM[1-9]|LPT[1-9]  # LPT1, LPT2, LPT3, LPT4, LPT5, \n"
+ " )  # LPT6, LPT7, LPT8, and LPT9... \n"
+ " +([.]txt) # followed by .txt    \n"
 "  $  # and end of string \n"
+ ")   # End negative lookahead assertion. \n"
+ "[^<>:\"/\\\\|?*\\x00-\\x1F.]*  # Zero or more valid filename chars.\n"
+ "[^<>:\"/\\\\|?*\\x00-\\x1F\\ .]  # Last char is not a space or dot.  \n"
+ "  +([.]txt)   # followed by .txt    \n"
+ "$   # Anchor to end of string.            ",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE| Pattern.COMMENTS);

我正在尝试使用此模式检查来验证文件名(仅.txt文本文件),但此模式不允许包含句点的文件名,例如:"a.b"。是否有人建议我缺少什么?

1 个答案:

答案 0 :(得分:0)

我认为评论"# Zero or more valid filename chars."的第4行应该没有点(.):

+ "[^<>:\"/\\\\|?*\\x00-\\x1F]*  # Zero or more valid filename chars.\n"

(而且我不确定倒数第二行中的量词+是什么。)

另见Validate a file name on Windows