我使用模式匹配将文件扩展名与我的表达式字符串匹配,其代码如下:-
public static enum FileExtensionPattern
{
WORDDOC_PATTERN( "([^\s]+(\.(?i)(txt|docx|doc))$)" ), PDF_PATTERN(
"([^\s]+(\.(?i)(pdf))$)" );
private String pattern = null;
FileExtensionPattern( String pattern )
{
this.pattern = pattern;
}
public String getPattern()
{
return pattern;
}
}
pattern = Pattern.compile( FileExtensionPattern.WORDDOC_PATTERN.getPattern() );
matcher = pattern.matcher( fileName );
if ( matcher.matches() )
icon = "blue-document-word.png";
当文件名为"Home&Artifact.docx"时,matcher.matches仍然返回false。它适用于扩展名为".doc"的文件名。
你能指出我做错了什么吗。
"Home&Artifact.docx"包含空格。由于允许除空白[^s]+
之外的任何字符,因此该文件名不匹配。
试试这个:
(.+?(.(?i)(txt|docx|doc))$
这是因为文件名("Home & Artifact.docx"
)中有空格,但正则表达式的[^\s]+
不允许有任何空格
将此正则表达式用于WORDDOC_PATTERN
:
"(?i)^.+?\.(txt|docx|doc)$"