5

我正在尝试匹配除以 .bmp 结尾的所有文件。

由于某些限制,我不能使用否定(?:,!:)和引用(\ 1,...)。

我做了一个表达式,它适用于大多数字符串:

^\w+\.([^b].*|b|b[^m].*|bm|bm[^p].*|bmp.+)$

它匹配不以 .bmp 结尾的所有内容 - 包括 test.txt、test.bmp.txt 等。但不幸的是,它确实允许 test.bi.bmp。

关于如何改进正则表达式以使其仅匹配以 .bmp 结尾的文件的任何想法?

4

3 回答 3

5

为什么不:

^.*[^p]$|^.*[^m]p$|^.*[^b]mp$|^.*[^.]bmp$

?

http://regexr.com?31vg7

另一种选择^.*([^p]|[^m]p|[^b]mp|[^.]bmp)$(更短)。

于 2012-08-28T11:42:25.600 回答
1
/^.+\.([^b][^.]*|b|b[^m][^.]*|bm|bm[^p][^.]*|bmp[^.]+)$/

只需确保“bmp”之前的点是最后一个点

于 2012-08-28T11:44:37.830 回答
0

不太优雅但有效:

^.*([^b][^m][^p]|b[^m][^p]|[^b]m[^p]|[^b][^m]p|bm[^p]|[^b]mp)$
于 2012-08-28T11:39:34.350 回答