<?php
// Исходный текст, в котором будем искать и заменять слова
$field = "
libero bryan,
sit amet adipiscing sem neque sed ipsum.bryan
bfringilla mauris sit amet nibh. https://site.com/member/bryan.html?r=nk07w,
https://site.com/member/bryan-t.html?r=nk07w.
https://site.com/bryan/test.html?r=nk07w Donec bibendum";
// Регулярное выражение для поиска URL и слова 'bryan'
// - https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)
// Это паттерн для нахождения URL. Он включает http или https, необязательный www, и остальную часть URL.
// - (\bbryan\b)
// Это паттерн для нахождения слова 'bryan' в тексте. Используем границы слова (\b) чтобы найти точное совпадение.
// Скобки вокруг \bbryan\b создают захватывающую группу, которую мы будем использовать в функции обратного вызова.
$pattern = '/https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)|(\bbryan\b)/';
// Заменяем слово 'bryan' на 'betty', но только если оно не является частью URL
$field = preg_replace_callback(
$pattern, // Паттерн для поиска URL и слова 'bryan'
function ($matches) {
// Функция обратного вызова, которая вызывается для каждого совпадения
// $matches - массив, где:
// - $matches[0] содержит всё совпадение (URL или слово 'bryan')
// - $matches[1] содержит только слово 'bryan', если оно найдено
// Если $matches[1] существует, это значит, что найдено слово 'bryan' (вторая группа в паттерне)
// В таком случае заменяем его на 'betty'
// Иначе возвращаем оригинальное совпадение (это был URL, который не нужно изменять)
return isset($matches[1]) ? 'betty' : $matches[0];
},
$field // Исходный текст, который мы будем обрабатывать
);
// Выводим результат
echo $field;