我正在使用模式匹配来匹配文件扩展名和我的表达式String,其代码如下: -
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”扩展名的文件名,它可以正常工作。
请你指出我做错了什么。
答案 0 :(得分:0)
这是因为您在文件名("Home & Artifact.docx"
)中有空格,但您的正则表达式为[^\\s]+
,不允许任何空格。
使用此正则表达式代替WORDDOC_PATTERN
:
"(?i)^.+?\\.(txt|docx|doc)$"
答案 1 :(得分:0)
“Home& Artifact.docx”包含空格。由于您允许除空格[^\s]+
之外的任何字符,因此该文件名不匹配。
请改为尝试:
(.+?(\.(?i)(txt|docx|doc))$