Регулярные выражения не очень хорошо подходят для работы с HTML.Каждое имеющееся у вас решение с треском провалится в комментариях, во встроенном javascript или в некорректном HTML.
Тем не менее, если вы строго контролируете структуру ваших документов, вы можете попробовать подход регулярных выражений.Чтобы соответствовать каждому «Lorem ipsum», не находящемуся внутри тега a
, я бы использовал
Lorem ipsum(?=([^<]*($|<a |<[^/]|</[^a]))*($|(?<=a )))
. В этом утверждении используется прогнозное утверждение для соответствия «Lorem ipsum», если оносопровождаемый открывающим тегом a
перед следующим закрывающим, или дальнейшие теги не следуют.Смотрите его в действии на RegExr .
Как вы можете видеть, вероятно, лучше использовать анализатор HTML.=)