我需要用于icefaces输入文件组件的正则表达式,文件名长度应小于15个字符并且具有适当的扩展名。我写了这个,但它失败了:
^ {0100} +(ASF |。AVI | CSV | PDF | DOC |的docx |点| EML | GIF | HTM | HTML | IDX | TIF | JPG | JPEG | BMP | PNG | MP3 | MPG |味精| PPT | PPTX |科普| RTF | TXT | WAV | WMA | XLS | XLSX |拉链“+ “| ASF | ASI | CSV | PDF | DOC | DOCX | DOT | EML | GIF | HTM | HTML | IDX | TIF | JPG | JPEG | BMP | PNG | MP3 | MPG |留言| PPT | PPTX | PST | RTP | TXT | WAV | WMA | XLS | XLSX | ZIP)
答案 0 :(得分:2)
文件名长度应小于15
这可以通过积极的前瞻(?=.{0,15}$)
来实现。然而,在前瞻性负面的情况下,这种情况可以更优雅地表达出来。我们可以在开始时使用(?!.{16})
负向预测,这意味着如果有16个字符,则匹配应该失败。
要缩短模式,您还可以使用embedded flag expression (?i)
。
所以,你可以使用
(?i)^(?!.{16}).+[.](?:asf|avi|csv|pdf|doc|docx|dot|eml|gif|htm|html|idx|tif|jpg|jpeg|bmp|png|mp3|mpg|msg|ppt|pptx|pst|rtf|txt|wav|wma|xls|xlsx|zip)$
请参阅regex demo。
请注意,.+
将尽可能多地匹配换行符号以外的任何1个字符,直到最后.
后跟其中一个扩展名。
带有?
量词的缩短版本:
(?i)^(?!.{16}).+[.](?:asf|avi|csv|pdf|docx?|dot|eml|gif|html?|idx|tif|jpe?g|bmp|png|mp[3g]|msg|pptx?|pst|rtf|txt|wav|wma|xlsx?|zip)$
答案 1 :(得分:0)
通过使用扩展来保持主要部分简单,保持简单:
^(?=.*\.(?i)(asf|avi|...etc...|zip)$).{,14}$