2015-03-13 56 views
0

我有基於文件的擴展名錶達一些後綴塊附件:正則表達式匹配無擴展名的文件名字符串

/^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

如何有?謝謝。

+0

您可以通過附加'?'作任何組的正則表達式可選。 – h2ooooooo 2015-03-13 12:00:19

+0

如果你想匹配「任何可執行文件」,那麼你錯過了幾個Windows。你爲什麼要這樣做,因爲這聽起來像一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – Richard 2015-03-13 12:06:45

+0

@理查德,好吧,我正在努力做到最好,這比任何事情都好。當然我會錯過一些擴展。 – greenV 2015-03-13 12:26:29

回答

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*(;|$) 
+0

似乎有用。 TNX – greenV 2015-03-13 12:24:22

0

的擴展名的文件將是一個無期,所以

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

會做到這一點。但考慮到這與System.Controller不符 - 那裏已包含一段時間作爲名稱的一部分。

相關問題