我可以使用this regex:
^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\"";|/]+$
在VBscript中检测无效的Windows文件名,并在保存之前拒绝它们。我想通过使用标准字符(如下划线“_”)自动替换任何无效字符(或其继承)来为我的用户添加其他服务。
因此,我需要提出另一种模式,因为据我所知,VBscript只提供了一种方法,如果模式匹配则替换:
with getRGX()
.ignoreCase = TRUE
.global = TRUE
.pattern = < inputPattern >
< outputCleanfileName > = .Replace( < inputDirtyFileName >, < "_" > )
end with
到目前为止,我设法提出的最好成绩如下:
((PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?)?[\\?*:\"";|/]+
不幸的是,它与扩展相混淆:
INPUT = COM1:aAZB?":a|a|a/.txt?
MATCH = COM1:?"||/.txt?
EXPECTED = COM1:?"||/?
如果我遗漏了一些明显的东西,我会提前道歉,并感谢您提供的任何帮助。
答案 0 :(得分:1)
我认为这个正则表达式符合你的要求:
(?:^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(?:\.(?=.)|$)|(?:([\x00-\x1f\\?*:\"";|/])))
您可以在Debuggex上查看其工作原理。我们的想法是&#34;反转&#34;拒绝正则表达式的每一部分。