Если вы только заботиться о том, что строка не заканчивается .jpg
или .png
, вы можете использовать это:
^.+$(?<!\.jpg)(?<!\.png)
^.+
не является строго необходимым, но в зависимости от того, как JSON парсер закодирован вас может потребоваться заставить регулярное выражение потреблять всю строку. Если вы используете регулярное выражение для других валидаций, а также, вы можете что-то более сложное, как:
^\w+(?:\.\w+)+$(?<!\.jpg)(?<!\.png)
Вы, вероятно, пытались использовать (?<!\.jpg|\.png)
, который не будет работать, потому что регулярное выражение вкус Python является одним из самых когда дело доходит до lookbehinds. PHP и Ruby 1.9+ приняли бы это, потому что каждая из альтернатив имеет фиксированную длину. Они даже не должны быть такой же длины; (?<!\.jpg|\.jpeg|\.png)
будет работать, тоже. Просто не пытайтесь разделить точку, как в (?<!\.(?:jpg|jpeg|png))
; чередование должно быть на верхнем уровне lookbehind.
Java будет принимать версию с факторингом, потому что во время компиляции требуется немного больше работы, чтобы определить максимальное количество символов, которые может потребоваться для поиска. Выражение lookbehind должно быть довольно простым, но оно не может использовать кванторы +
или *
. Наконец, в .NET и JGSoft нет никаких ограничений на lookbehind. Но Python делает очень простомысленную попытку выяснить точное количество символов, которые нужно искать в lookbehind, генерируя это загадочное сообщение об ошибке, когда он терпит неудачу.
отличная работа! отлично – yash