Требуется замена отрицательной замены переменной ширины

Я рассмотрел многие вопросы здесь (и многие другие веб-сайты), а некоторые предоставили намеки, но никто не дал мне окончательного ответа. Я знаю регулярные выражения, но я далек от того, чтобы быть гуру. Этот конкретный вопрос касается регулярного выражения в PHP.

Мне нужно найти слова в тексте, который не окружен гиперссылкой данного класса. Например, я мог бы

This <a href="blabblah" class="no_check">elephant</a> is green and this elephant is blue while this <a href="blahblah">elephant</a> is red. 

Мне нужно было бы сопоставлять со вторым и третьим слонами, но не с первым (идентифицированным тестовым классом «no_check»). Обратите внимание, что в гиперссылках может быть больше атрибутов, чем только href и class. Я придумал

 ((?<!<a .*class="no_check".*>)\belephant\b) 

который прекрасно работает в тестовом программном обеспечении regex, но не в PHP.

Любая помощь приветствуется. Если вы не можете предоставить регулярное выражение, но можете найти какую-то логику кода PHP, которая обошла бы ее необходимость, я был бы в равной степени благодарен.

Если отрицательный внешний вид переменной ширины недоступен, быстрое и грязное решение состоит в том, чтобы поменять строку в памяти и вместо этого использовать отрицательный внешний вид переменной ширины. затем снова измените строку.

Но вам может быть лучше использовать парсер HTML.

Я думаю, что самый простой подход состоял бы в том, чтобы сопоставить либо полный элемент <a> с атрибутом no_check, либо слово, которое вы ищете. Например:

 <a [^<>]*class="no_check"[^<>]*>.*?</a>|(\belephant\b) 

Если бы это было слово, которое вы соответствовали, оно будет в группе захвата # 1; если нет, эта группа должна быть пустой или пустой.

Конечно, по «простейшему подходу» я действительно имел в виду простейший подход к регулярному выражению . Еще проще было бы использовать парсер HTML.

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

Идея использования парсера HTML была хорошей, хотя в настоящее время я использую один в другом проекте. Так что шляпы уходят как Алану Муру, так и Эрику Стром за предложение этого решения.