Как preg_replace заменить только слова ??

Статус
В этой теме нельзя размещать новые ответы.

genarator2003

Постоялец
Регистрация
23 Авг 2007
Сообщения
115
Реакции
8
Код таков
PHP:
$text = "Beschreibung: Diese Jeans sind die funny-Länge,  Beschreibung 7 / 8 mit einer einzigen Bewegung verkürzt. \n Der untere Teil Beschreibung \n der Beine mit Knöpfen und Gurt\n ist auf der Seite fixiert. Auch konzentriert sich die Aufmerksamkeit Beschreibung auf einen Stoffgürtel mit filigranen floralen Stickereien. Cut mit 4 Taschen. Gürtelschlaufen. Front-Reißverschluss Beschreibung";
        echo $text;
        echo "\n<br>\n";
        $word = "Beschreibung";
        $pattern = "/^".$word."\W|\W".$word."\W|\W".$word."$/i";
        preg_match_all($pattern, $text, $matches);
        print_r($matches);
        $text = preg_replace($pattern, "{YA}", $text);

Задача состтоит в том чтобы заменить только слова на что-то а он ещё забирает и то что рядом заяпыте например т.е. для слова Beschreibung: после замены будет {YA} а надо чтобы было {YA}:. Как сделать ?

Зачем всё это
Вот смотрите есть фраза - "Мирный мир построим снова к понедельнику готова мирный мир"
Мне нужно чтобы "мир" было заменено, а слово "мирный" осталось как есть чтобы корень его(мир) не был подвергнут замене.
 
Так подойдет, или нужно именно через регулярки?
PHP:
<?
$text = "Beschreibung: Diese Jeans sind die funny-Länge,  Beschreibung 7 / 8 mit einer einzigen Bewegung verkürzt. \n Der untere Teil Beschreibung \n der Beine mit Knöpfen und Gurt\n ist auf der Seite fixiert. Auch konzentriert sich die Aufmerksamkeit Beschreibung auf einen Stoffgürtel mit filigranen floralen Stickereien. Cut mit 4 Taschen. Gürtelschlaufen. Front-Reißverschluss Beschreibung";
        echo $text;
        echo "\n<br>\n";
        $word = "Beschreibung";
      
        $text = str_replace($word, "{YA}", $text);  
        echo $text;
 
если слово известно
PHP:
<?php
$text = "Beschreibung: Diese Jeans sind die funny-Lange,  Beschreibung 7 / 8 mit einer einzigen Bewegung verkurzt. \n Der untere Teil Beschreibung \n der Beine mit Knopfen und Gurt\n ist auf der Seite fixiert. Auch konzentriert sich die Aufmerksamkeit Beschreibung auf einen Stoffgurtel mit filigranen floralen Stickereien. Cut mit 4 Taschen. Gurtelschlaufen. Front-Rei?verschluss Beschreibung"; 
        echo $text; 
        echo "\n<br>\n"; 
        $word = "Beschreibung"; 
        $pattern = "/".$word."/is"; 
        $text = preg_replace($pattern, "{YA}", $text); 
		echo "<hr>";
echo $text; //{YA}: Diese Jeans sind die funny-Lange, {YA} 7 / 8 mit einer einzigen Bewegung verkurzt. Der untere Teil {YA} der Beine mit Knopfen und Gurt ist auf der Seite fixiert. Auch konzentriert sich die Aufmerksamkeit {YA} auf einen Stoffgurtel mit filigranen floralen Stickereien. Cut mit 4 Taschen. Gurtelschlaufen. Front-Rei?verschluss {YA}
а зачем в вашем коде preg_match_all вообще не понятно
 
zzallexx
usja

Похоже я не объяснил тему зачем всё это
Вот смотрите есть фраза - "Мирный мир построим снова к понедельнику готова мирный мир"
Мне нужно чтобы "мир" было заменено, а слово мирный осталось как есть чтобы корень его не был затронут.
 
тогда в фразу добавь пробел.
не проканает, если после фразы будут идти символы пунктуации. А делать str_replace для всех вариантов - не комильфо.
 
Для просмотра ссылки Войди или Зарегистрируйся

заменяй с пробелами " мир " -> " "
тогда " мирНЫЙ" не будет подходить под фильтр.

слова ведь разделяются чем? пробелами! логично? логично.
 
PHP:
$text = 'Мирный мир построим снова к понедельнику готова мирный мир';
$word = "мир";
//заменяем если вокруг слова есть символы пунктуации и другие
echo preg_replace('/(^|[!@#$%^&*\(\)<>\.,\-\_\+\=\{\}\[\]\^]|\s)'.$word.'([!@#$%^&*\(\)<>\.,\-\_\+\=\{\}\[\]\^]|\s|$)/i', '$1замена$2', $text);
//или если вокруг слова нет букв из кириллицы, латиницы и цифр
echo preg_replace('/([^a-zа-яё0-9]|^)'.$word.'([^a-zа-яё0-9]|$)/i', '$1замена$2', $text);
 
PHP:
$text = 'Мирный мир построим снова к понедельнику готова мирный мир';
$word = "мир";
//заменяем если вокруг слова есть символы пунктуации и другие
echo preg_replace('/(^|[!@#$%^&*\(\)<>\.,\-\_\+\=\{\}\[\]\^]|\s)'.$word.'([!@#$%^&*\(\)<>\.,\-\_\+\=\{\}\[\]\^]|\s|$)/i', '$1замена$2', $text);
//или если вокруг слова нет букв из кириллицы, латиницы и цифр
echo preg_replace('/([^a-zа-яё0-9]|^)'.$word.'([^a-zа-яё0-9]|$)/i', '$1замена$2', $text);
Все эти извращения заменяются одним символом \b - который означает граница слова, и не захватывает запятые, точки итд.
PHP:
echo preg_replace('/\b'.$word.'\b/i', 'замена', $text);
 
\b работает только для латинских букв и цифр A-Za-z0-9_
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху