RegExp Конец строки - PullRequest
       3

RegExp Конец строки

0 голосов
/ 24 августа 2011

Я пытаюсь найти строки, которые не заканчиваются на </url>

Вот регулярное выражение, которое я получил до сих пор.

\<\/url\>

Я могу найти </url>, но я ищу строки, в которых пропущен конец.

Мои данные выглядят так:

<url><loc>blah1 blah1 blah1</loc></url>    
<url><loc>blah2 blah2 blah2    
<url><loc>blah3 blah3 blah3</loc></url>

В этом примере я пытаюсь найти строку, котораявыглядит как blah2

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Это регулярное выражение должно работать для вас, если в конце строки нет пробелов:

/^.*?(?<!<\/url>)$/

Редактировать Вот еще один более сложный способ работыне смотреть назад:

^.*?([^>]|[^l].|[^r].{2}|[^u].{3}|[^/].{4}|[^<].{5})$
0 голосов
/ 25 августа 2011

Попробуйте это:

^(?:(?!</url>$).)*$

Это фактически ^.*$, но каждый раз, когда . собирается совпадать, предвкушение пытается сопоставить </url> с последующим концом строки. Если это удастся, совпадение не удастся.

Однако я замечаю, что первые две строки в вашем примере заканчиваются несколькими пробелами. Если это верно в отношении ваших реальных данных, вам необходимо включить их в запрос:

^(?:(?!</url>[ \t]*$).)*$

Это также будет соответствовать абсолютно пустой строке. Если вам требуется хотя бы один символ, вы можете изменить * на +:

^(?:(?!</url>$).)+$

... или вам может потребоваться сопоставить только строки, которые начинаются с <url>:

^<url>(?:(?!</url>$).)$
...