Попробуйте это:
^(?:(?!</url>$).)*$
Это фактически ^.*$
, но каждый раз, когда .
собирается совпадать, предвкушение пытается сопоставить </url>
с последующим концом строки. Если это удастся, совпадение не удастся.
Однако я замечаю, что первые две строки в вашем примере заканчиваются несколькими пробелами. Если это верно в отношении ваших реальных данных, вам необходимо включить их в запрос:
^(?:(?!</url>[ \t]*$).)*$
Это также будет соответствовать абсолютно пустой строке. Если вам требуется хотя бы один символ, вы можете изменить *
на +
:
^(?:(?!</url>$).)+$
... или вам может потребоваться сопоставить только строки, которые начинаются с <url>
:
^<url>(?:(?!</url>$).)$