Preg_replace match на слове boundery, а не в ссылке

Я пытаюсь написать регулярное выражение для соответствия словам на boundery, и поскольку текст в html, мне нужно избегать слов, которые находятся в <a>here more words</a> .

Мое регулярное выражение пока: /\bword\b/u

Пример текста:

 <p>Example lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur <a href="">porta lorem nec</a> tortor laoreet gravida.</p> 

Поиск lorem следует заменить только в начале, а не в <a> .

Related of "Preg_replace match на слове boundery, а не в ссылке"

Вы можете использовать некоторые темные силы, как показано ниже:

<a[^>]*>.*?</a\s*>(*SKIP)(*FAIL)|\blorem\b

Давайте сломаем это:

 <a[^>]*> # match an opening "a" tag .*? # match anything ungreedy until ... </a\s*> # match a closing "a" tag (*SKIP)(*FAIL) # skip it | # or \blorem\b # match lorem with boundaries 

Поэтому в основном мы сначала пропускаем все теги, затем мы сопоставляем lorem .

См. Рабочую демонстрацию

/u в вашем регулярном выражении может быть неуместным или ненужным. он обычно указывает на unicode в PHP, но, например, не разрешен в JavaScript.
Или может быть, вы используете preg_match вместо preg_match_all в своем PHP