PHP preg_replace_callback соответствует строке, но исключает URL

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

Например:

test
<a href="test.com">test title</a>
test

В этом случае я хочу, чтобы первая строка соответствовала, а третья строка соответствовала, но НЕ совпадало с URL-адресом и заголовком между тегами a.

У меня есть регулярное выражение, которое я чувствую, как близко:

#(?!<.*?)(\btest\b)(?![^<>]*?>)#si

(и это не будет соответствовать части URL)

Но как мне изменить регулярное выражение, чтобы исключить "тест" между а и / а?

2 ответа

Я решил сам. Этот шаблон регулярных выражений будет делать то, что я хотел:

#(?!<a[^>]*?>)(\btest\b)(?![^<]*?<\/a>)#si

Если это всегда один и тот же шаблон, вы можете использовать [AZ] или комбинацию, например [A-Za-z]

Другие вопросы по тегам