我想匹配尚未创建缩略图的文件。
因此,对于创建了两个缩略图的图像:
image1-100x100.png
image1-350x350.png
image1.png
我正在寻找一些仅与image1.png匹配的正则表达式。
我目前只选择扩展程序:
(?!(-(100x100|350x350)))(\.(jpg|png))
答案 0 :(得分:3)
试试这个:
^(?!.*-(?:100x100|350x350)).*\.(?:jpg|png)$
<强>解释强>
^ # Start of string
(?! # Assert that it's impossible to match...
.* # any string, followed by
- # a dash, followed by
(?:100x100|350x350) # 100x100 or 350x350
) # End of lookahead.
.* # Then match any string
\. # followed by a dot
(?:jpg|png) # and a jpg/png extension.
$ # End of string
答案 1 :(得分:2)
一个或多个非连字符,后跟.jpg
或.png
:
^[^-]+\.(?:jpg|png)$
无需负面预测。 (请注意,您现有的正则表达式实际上只相当于(\.(jpg|png))
:前瞻没有实际效果,因为没有字符串可以(\.(jpg|png))
作为前缀和 (-(100x100|350x350))
作为前缀。)
编辑添加:您的问题似乎有些自相矛盾,因为您最初说您“想要匹配尚未创建缩略图的文件”,但在您的示例中,您说要匹配image1.png
,即使 已创建了两个缩略图。
在我看来,您还没有明确规定如何确定图像是否为缩略图。上面,我采用了最简单的方法,即假设缩略图的文件名包含连字符,而其他图像的文件名则不包含。或者,我们可能会对缩略图进行最狭窄的定义,并说“如果文件的文件名以.jpg
或.png
结尾,而不是-100x100
,则文件是非缩略图。 1}}或-350x350
“;在这种情况下,我们可以写:
^.*(?<!-100x100)(?<!-350x350)\.(?:jpg|png)\z
使用负面的lookbehind。 。 。假设一个支持负面观察的正则表达式引擎。 (你没有提到你正在使用的是什么语言?)如果没有负面的观察,我们可以改写:
^(?:[^-]|-(?!(?:100x100|350x350)\.(?:jpg|png)\z))*\.(?:jpg|png)\z
但是使用两个正则表达式要简单得多:
\.(?:jpg|png)\z
-(?:100x100|350x350)\.(?:jpg|png)\z
并要求字符串不与第二个匹配。你的问题意味着你想做一个肯定的正则表达式,但你没有提到为什么?
答案 2 :(得分:1)
^(.+)(?!(-((\d+)x(\d+))))(\.(jpg|png))$