Regex - сопоставить конечный HTML-тег, если начальный тег отсутствует - PullRequest
2 голосов
/ 02 декабря 2008

я хочу получить конечный html-тег, такой как </EM>, только если где-то перед ним, т. Е. Перед любыми предыдущими тегами или текстом, нет начального <EM> тега, мой образец строки

ddd d<STRONG>dfdsdsd dsdsddd<EM>ss</EM>r and</EM>and strong</STRONG>

в этой строке вывод должен быть </EM>, а также второй </EM>, потому что в нем отсутствует начальный <EM>. я пробовал

(?!=<EM>.*)</EM>

но, похоже, не работает, пожалуйста, помогите thnks

Ответы [ 3 ]

3 голосов
/ 02 декабря 2008

Я не уверен, что регулярное выражение лучше всего подходит для такого рода задач, поскольку теги всегда могут быть вложенными.

Во всяком случае, регулярное выражение C # вроде:

(?<!<EM>[^<]+)</EM>

принесет только второй </EM> тег

Обратите внимание, что:

  • ?! - это негативный взгляд впереди , который объясняет, почему оба </EM> найдены.
    Итак ... (?!=<EM>.*) xxx фактически означает захват xxx, если за ним не следует =<EM>.*. Я не уверен, что вы хотели включить туда =
  • ?<! - это отрицательный взгляд за , более подходящий для того, что вы хотели сделать, но который не будет работать с движком Java Regex, поскольку это регулярное выражение не имеет очевидной максимальной длины .

Однако, с .Net regex engine, как было проверено на RETester , он работает.

0 голосов
/ 11 января 2014

Вы должны увидеть главный ответ на этот другой вопрос переполнения стека , потому что он дает идеальный ответ. Короче говоря, не пытайтесь анализировать HTML с помощью регулярных выражений - это действительно плохая идея.

0 голосов
/ 02 декабря 2008

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

Тем не менее, регулярные выражения .NET do имеют за собой автомат, который может теоретически справиться с такими случаями. Если вам действительно нужно делать это с помощью регулярных выражений, а не формального анализатора HTML, взгляните здесь .

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