Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件名正则表达式-限制名称大小和文件扩展名_Java_Regex_Icefaces - Fatal编程技术网

Java 文件名正则表达式-限制名称大小和文件扩展名

Java 文件名正则表达式-限制名称大小和文件扩展名,java,regex,icefaces,Java,Regex,Icefaces,我需要为icefaces输入文件组件的正则表达式,文件名长度应小于15个字符,并有适当的扩展名。我写了这个,但是失败了: ^(asf | avi | csv | pdf | doc | docx | dot | eml | gif | htm | html | idx | tif | jpg | jpg | bmp | png | xlmp3 | mpg | msg | ppt | pst | rtf | txt | wav |+ “| ASF | ASI | CSV | PDF | DOC |

我需要为icefaces输入文件组件的正则表达式,文件名长度应小于15个字符,并有适当的扩展名。我写了这个,但是失败了:

^(asf | avi | csv | pdf | doc | docx | dot | eml | gif | htm | html | idx | tif | jpg | jpg | bmp | png | xlmp3 | mpg | msg | ppt | pst | rtf | txt | wav |+ “| ASF | ASI | CSV | PDF | DOC | DOCX | DOT | EML | GIF | HTML | IDX | TIF | JPG | JPG | PNG | MP3 | mpxlg | MSG | PPT | PPTX PST | RTP | TXT | WAV | s |

文件名长度应小于15

这可以通过正向前瞻
(?=.{0,15}$)
实现。然而,通过一个消极的前瞻,这个条件可以更优雅地表达出来。我们可以使用
(?!.{16})
在开头锚定的负前瞻,这意味着如果有16个字符,则匹配应该失败

要缩短图案,还可以使用
(?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)$

请注意,
+
将尽可能多地匹配除换行符以外的任何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)$

通过使用扩展的前瞻性来保持主要部分的简单:

^(?=.*\.(?i)(asf|avi|...etc...|zip)$).{,14}$

通过使用
i
“不区分大小写”标志,可以避免重复已知扩展名的大小写版本。请尝试
^(?。{16})。*\(?:您的扩展名)$
(或者正如Aaron所建议的,
(?i)^(?。{16})。*\(?:您的扩展名)$
)(请注意,Java字符串文本中的反斜杠必须加倍)如果您想要最多15个字符,为什么要将上限设置为100?那些点是怎么回事<代码>{0100}=0到100的任意字符<代码>+=任何字符中的一个或多个
=任何字符中的一个字符。总之,这意味着任何字符都有两个或两个以上。文件名长度的上限不得小于15个字符。您的表达式至少允许19。@wik将其解释为表示非扩展名part@wik好啊我想你是对的。我仍然认为我有接吻的办法:)是的,我知道,我们属于不同的雷格克斯学校。我相信精确。你选择简单。让OP和其他人来决定哪个表达式是最好的。@Wik我也喜欢精度,而且我总是渴望学习,那么我的正则表达式有什么不精确之处呢?lookaheads中的数字可能需要调整(我假设等于或小于15)。如果长度不能为15,则应将其更改为
(?!。{15})
(和
(?=。{0,14}$)
)。^(?。。。。{16})。*\(?:您的\u扩展名)$对于icefaces组件来说工作正常