Регулярное выражение: сопоставление элементов HTML, которые не содержат определенный текст - PullRequest
2 голосов
/ 18 февраля 2010

Мне нужно убрать из html любые фильмы, которые не размещены на YouTube.Первоначально просьба была вообще исключить любые фильмы, для которых

<object.*object>

работал довольно хорошо.Теперь мне нужно сделать то же самое, но только если содержимое тегов объекта не размещено на YouTube.Мне нужен шаблон регулярных выражений, который будет соответствовать строке, которая начинается с, но не содержит слово «YouTube».Вероятно, мне нужно учесть еще кое-что, если бы мне нужно было это работать со всеми возможными сценариями, но вышеприведенное должно помочь в решении этой задачи.

Я играл с негативными взглядами, нопока не смог заставить его работать.Вот некоторые из вещей, которые я пробовал:

<object.*(?!youtube).*object> - сопоставляет все теги объектов, поскольку * жаден

<object.+?(?!youtube).+?object>

<object(?!youtube)*object>

, а также множество других, которые еще больше усиливают мое поражениедико в темноте на этом.

Это в Java 1.6

Ответы [ 2 ]

6 голосов
/ 18 февраля 2010

Попробуйте:

(?s)<object((?!youtube).)*?object>
  1. (?s) приведет к тому, что метасимвол DOT будет соответствовать любому символу (включая разрывы строк)
  2. <object и object> должны быть четкими
  3. (?!youtube). в первую очередь проверит, не виден ли youtube, и если это так, регулярное выражение будет соответствовать любому символу
  4. ((?!youtube).)*? будет соответствовать [3] ноль или более раз, неохотно («не жадный»)

Имейте в виду, что с помощью регулярных выражений возможно, что что-то пойдет не так. Для более надежного решения используйте синтаксический анализатор (x) HTML для итерации по всем тегам объекта и проверьте, существует ли «youtube» в атрибуте или inner-html, который вы ожидаете.

0 голосов
/ 18 февраля 2010

как насчет того, чтобы не быть таким жадным? :) <object.*?(?!youtube).*?object>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...