Regexp: негативная ретроспективная проверка на принадлежность тегу
Столкнулся с проблемой, необходимо обертывать в ссылки некоторые фразы в документе. Написал регклярку, но вот беда —не могу обработать исключение, когда фраза уже обернута в ссылку.
<?php
$pattern = '#(?<!")('.$phrase.')(?!</a>)(?!</h1>)(?!</h2>)#iu';
$content = preg_replace($pattern, '<a href="'.$link.'" class=«sph»>$1</a>', $content);
?>
Я добавил опережающие проверки, но проблема в том, что если нужной фразы есть еще слова, то проверки не срабатывают. Например фраза из одного слова «Оne»,
<a href="/test/">One</a>
в таком контексте обрабатывается нормально, а в этом случае получаю ссылку в ссылке:
<a href="/test/">One two</a>
Подскажите, как все-таки проверить нет принадлежит ли текст ссылке?
Можно контент разбить (preg_split) на фрагменты по разделителю "<a\s.*?", и потом обработать каждый отдельный элемент разбиения, а в конце, все во-едино склеить.