匹配无扩展名文件名字符串的正则表达式

Regular expression to match no-extension file name string

我有一些基于文件扩展名表达式的 Postfix 块附件:

/^Content-(Disposition|Type).*name\s*=\s*"?(.*(\.|=2E)(
ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
hlp|ht[at]|
inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
\{[[:xdigit:]]{8}(?:-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}\}|
ops|pcd|pif|prf|reg|sc[frt]|sh[bsm]|swf|
vb[esx]?|vxd|ws[cfh]))(\?=)?"?\s*(;|$)/x

如您所见,这与 Content-Disposition: attachment; filename=anythng.xyz 其中 xyz 可能是上面给出的许多文件扩展名(bat、com、exe、sh...)。

我在想如何在附件没有扩展名的情况下包含大小写?

通常有没有扩展名的二进制文件,*nix OS 将没有扩展名的文件计为可能的二进制文件。

所以我想在给定的表达式中包含选项来匹配无扩展文件名字符串,例如:Content-Disposition: attachment; filename=anythng

那怎么办?谢谢

无扩展名的文件就是没有句号的文件,所以

…name\s*=\s*[^.]+$

会做的。但考虑到这不会匹配 System.Controller – 其中句点已作为名称的一部分包含在内。

你可以使用这个https://regex101.com/r/mI9qC6/1

^Content-(Disposition|Type).*name\s*=\s*"?([^.]*((\.|=2E)(
ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
hlp|ht[at]|
inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
\{[[:xdigit:]]{8}(?:-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}\}|
ops|pcd|pif|prf|reg|sc[frt]|sh[bsm]|swf|
vb[esx]?|vxd|ws[cfh]))?)(\?=)?"?\s*(;|$)