Помогите написать регулярное выражение

M7
На сайте с 30.11.2012
Offline
65
543

Подскажите какое должно быть регулярное выражение для чтобы в тексте:

Саша любит Машу, а Марина не <b>любит</b> Колю

слово "любит" в первом вхождении(без тега <b>) заменялось на подстановочную фразу, а там где есть вхождение тега <b> оставалось без замены.

Слово "любит" взял для примера. Вместо него может идти любое слово или фраза.

Вместо тега <b> могут также быть любые другие теги: <A href></a>, <i></i> и т.д.

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#1

Я конечно не знаю как вас текст храниться.

$text='Саша любит Машу, а Марина не <b>любит</b> Колю';

preg_match('@>(.*?)<@smi',$text,$slovo);

$text=str_replace(' '.$slovo[1].' ','подстановочная фраза',$text);

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
M7
На сайте с 30.11.2012
Offline
65
#2

так не пойдет, т.к. есть например вариант когда слово или фраза идет в конце предложения и в конце не пробел, а точка

siv1987
На сайте с 02.04.2009
Offline
427
#3

$text='Саша любит Машу, а Марина не <b>любит</b> Колю';

$text = preg_replace( '/>(.+?)</s', '>постановочное слово<', $text );

RiDDi
На сайте с 06.06.2010
Offline
285
#4

ну если Вы точно сформулировали задачу, то достаточно регулярки по поиску фразы начинающейся с пробела или начала строки

/(\s|^)любит/is
Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
K
На сайте с 28.12.2008
Offline
61
kud
#5
RiDDi:
ну если Вы точно сформулировали задачу, то достаточно регулярки по поиску фразы начинающейся с пробела или начала строки

/(\s|^)любит/is

Не достаточно :)

А если в тексте первым будет идти слово: "любители" ?

Можно попробовать, например, так:

#(?:\s|^)$word\b#Usi
dma84
На сайте с 21.04.2009
Offline
168
#6

для UTF-8

$text='Саша любит Машу, а Марина не <b>любит</b> Колю.';
$word = 'любит';
$text = preg_replace('#(?<!\pL)любит(?!\pL)(?![^>]*?<\/)#iu', 'ненавидит',$text);
echo $text;

Для cp1251


$text = preg_replace('#(?<!\w)любит(?!\w)(?![^>]*?<\/)#i', 'ненавидит',$text);

Для полноты картины проверяйте на этом бредотексте :)


$text='Саша любит Машу, а Марина не <b>очень любит зануду</b> Колю. Катя полюбит Петю, но Петя девочек любит.';

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий