2

我正在尝试编写一个 java 正则表达式,我的应用程序应该限制正则表达式中提到的文件或文件类型的名称附加到电子邮件中。我像这样开始了正则表达式,

    .*\\.(?:jpeg|jpg)$.

这个对吗?。现在它不工作(匹配)。另外,如果我想扩展这个正则表达式,如何向这个表达式添加新的文件类型或文件名。比如说,我想在这个正则表达式中添加 vcf 文件类型,我应该怎么做?另外,如果我需要添加文件名,比如说 abc.bmp 被附加,我应该如何以及在哪里将该文件名包含在这个正则表达式中?非常感谢任何帮助,因为我是这个正则表达式的新手。

4

3 回答 3

3

关于什么

if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
    // good
} else {
    // bad
}

我在 m.buttners 回答下阅读了您的评论并提出以下建议:

List<String> allowedExtensions = loadExtensionsFromConfig(); // implement this
boolean isFileAllowed = false;
for (String extension : allowedExtensions) {
    if (fileName.endsWith(extension)) { // this is case sensitive!
        isFileAllowed = true;
        break;
    }
}
于 2012-12-04T21:15:27.070 回答
2

它应该是这样的:

.*\\.(jpe?g)$
于 2012-12-04T21:19:13.217 回答
0

它不匹配的原因只是.在最后。这会尝试匹配字符串末尾的字符这显然行不通。删除它,你应该没问题。请注意,您可以减少(?:jpeg|jpg)jpe?g.

这并不是说正则表达式是解决这个问题的正确方法。我更喜欢 jlordo 的方法,只要只有少量可能的文件扩展名。这只是为了让您知道正则表达式哪里出错了。

请注意,要么 要么.*$多余的。如果您使用match它,无论如何都需要模式匹配整个字符串。在这种情况下,您不需要$再次断言。如果你使用find,那么你不需要匹配任意的字符串部分,所以你可以省略.*.

编辑:

经过评论中的讨论,如果您有一组允许的扩展名,加上一组允许的特定文件名,这将是一般的正则表达式:

^(?:.*\\.(?:all|allowed|file|extensions)|all\\.allowed|file\\.names)$
于 2012-12-04T21:18:12.457 回答