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

时间:2015-03-13 11:58:43

标签: regex pcre

我有一些基于文件扩展名表达式的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

怎么样?感谢。

2 个答案:

答案 0 :(得分:0)

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

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

会这样做。但请注意,这与System.Controller不匹配 - 其中一个句点已作为名称的一部分包含在内。

答案 1 :(得分:0)

您可以使用此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*(;|$)
相关问题