один или более не дефис, а затем .jpg
или .png
:
^[^-]+\.(?:jpg|png)$
Нет необходимости отрицательного предпросмотра. (Обратите внимание, что существующее регулярное выражение фактически эквивалентно просто (\.(jpg|png))
: опережения не имеют никакого реального эффекта, так как строка не может иметь (\.(jpg|png))
как префикс и(-(100x100|350x350))
в качестве префикса.)
Отредактировано добавить: Ваш вопрос кажется несколько противоречивым, поскольку вы изначально говорите, что хотите «найти файлы, которые еще не создали миниатюры», но затем в вашем примере вы говорите, что хотите сопоставить image1.png
, хотя он имеет было создано два эскизов.
Вы также, на мой взгляд, не даете четких правил определения того, как изображение является миниатюрой. Выше, я взял самый простой подход, который должен предположить, что имена файлов эскизов содержат дефисы и другие имена файлов изображений. В качестве альтернативы мы можем взять самое узкое определение миниатюрного изображения и сказать, что «файл представляет собой изображение без миниатюр, если его имя файла заканчивается на .jpg
или .png
, которому не предшествуют -100x100
или -350x350
»; в этом случае мы можем написать:
^.*(?<!-100x100)(?<!-350x350)\.(?:jpg|png)\z
используя отрицательный lookbehind. , , предполагая двигатель регулярных выражений, который поддерживает отрицательный lookbehind. (? Вы не говоря уже о каком языке вы используете) без отрицательного просмотра назад, мы можем вместо этого написать:
^(?:[^-]|-(?!(?:100x100|350x350)\.(?:jpg|png)\z))*\.(?:jpg|png)\z
но это гораздо проще использовать два регулярных выражений:
\.(?:jpg|png)\z
-(?:100x100|350x350)\.(?:jpg|png)\z
и требуют что строка не соответствует второму. Ваш вопрос подразумевает, что вы хотите сделать это как одно положительное регулярное выражение, но вы не упоминаете, почему?
Что делать, если ваше имя файла 'image1-200x200.png'? – anubhava
Умный вам. Ну, обычно размеры миниатюр более стандартизированы, чем имена файлов, но, конечно, если они являются переменными, то это нужно учитывать. Правила не определены достаточно четко, чтобы делать больше, чем предполагалось. –
Согласовано, это один из тех вопросов с неполными и неопределенными требованиями. – anubhava