2012-05-31 2 views
0

Я пытаюсь создать регулярное выражение для удаления ссылок из содержимого, если оно не содержит 1 из 2 условий.Регулярное выражение с отрицательным внешним видом

<a.*?href=[""'](http[s]?:\/\/(.*?)\.link\.com)?\/(?!m\/).*?<\/a> 

Это будет соответствовать любой ссылке на link.com, которая не имеет m/в конце раздела домена. Я хочу, чтобы изменить это немного, так что does't матч URL-адресов, которые ссылки на файлы в формате PDF, независимо от имеющего м/в URL, я придумал:

<a.*?href=["'](http[s]?:\/\/(.*?)\.brodies\.com)?\/(?!m\/).*?\.(?!pdf)["'].*?<\/a> 

Что ооо так очень близко, за исключением теперь будет соответствовать только в том случае, если URL-адрес имеет «.». в конце - я понимаю, почему он это делает. Кажется, я не могу сделать "." необязательно, поскольку это вызывает нежелательный шаблон до «.». чтобы продолжать идти до тех пор, пока не попадает в [ " ']

Любая помощь будет хорошо, чтобы помочь решить эту проблему.

Благодаря Пол

ответ

1

Вы, вероятно, хотите использовать (?<!\.pdf)["'] вместо \.(?!pdf)["'].

Но обратите внимание, что это выражение имеет несколько проблем, лучший способ их решения - использовать правильный HTML-парсер.

1

Во-первых, RegEx match open tags except XHTML self-contained tags.

Это говорит о том, что (поскольку это, вероятно, не сдерживается), вот немного улучшенная версия того, что вы пытаетесь сделать, с предостережением, что это все еще недостаточно!

<a[^>]+?href\s*=\s*["'](https?:\/\/[^"']*?\.link\.com)?\/(?!m\/)[^"']*?\.(?!pdf)[^"']*?["'][^>]*?>.*?<\/a> 

Вы можете увидеть бегущую пример этого регулярного выражения по адресу: http://rubular.com/r/obkKrKpB8B.

Ваша проблема была в том, что вы искали символ цитаты сразу после точки, здесь: .(?!pdf)["'].

+0

Спасибо, довольно полное выражение, и да, это может быть недостаточно для всех случаев, но я думаю, что это природа зверя. Выражение, которое я построил, было достаточно хорошим, чтобы соответствовать ссылкам, которые встречаются там, где они используются, кроме ссылок на PDF. Спасибо за это, я отдам это. –

Смежные вопросы