Я пытаюсь написать регулярное выражение для соответствия словам на 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>
.
Вы можете использовать некоторые темные силы, как показано ниже:
<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