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

Тема в разделе "Регулярные выражения", создана пользователем genarator2003, 22 авг 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. genarator2003

    genarator2003 Постоялец

    Регистр.:
    23 авг 2007
    Сообщения:
    113
    Симпатии:
    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}:. Как сделать ?

    Зачем всё это
    Вот смотрите есть фраза - "Мирный мир построим снова к понедельнику готова мирный мир"
    Мне нужно чтобы "мир" было заменено, а слово "мирный" осталось как есть чтобы корень его(мир) не был подвергнут замене.
     
  2. usja

    usja Создатель

    Регистр.:
    17 авг 2011
    Сообщения:
    34
    Симпатии:
    5
    Так подойдет, или нужно именно через регулярки?
    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;
     
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    если слово известно
    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 вообще не понятно
     
  4. genarator2003

    genarator2003 Постоялец

    Регистр.:
    23 авг 2007
    Сообщения:
    113
    Симпатии:
    8
    zzallexx
    usja

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

    usja Создатель

    Регистр.:
    17 авг 2011
    Сообщения:
    34
    Симпатии:
    5
    тогда в фразу добавь пробел.
    не проканает, если после фразы будут идти символы пунктуации. А делать str_replace для всех вариантов - не комильфо.
     
  6. coguar

    coguar Постоялец

    Регистр.:
    4 авг 2007
    Сообщения:
    61
    Симпатии:
    11
    genarator2003

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

    слова ведь разделяются чем? пробелами! логично? логично.
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    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);
     
  8. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Все эти извращения заменяются одним символом \b - который означает граница слова, и не захватывает запятые, точки итд.
    PHP:
    echo preg_replace('/\b'.$word.'\b/i''замена'$text);
    http://stackoverflow.com/questions/...s-positive-lookahead-and-word-border-question
     
  9. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    \b работает только для латинских букв и цифр A-Za-z0-9_
     
Статус темы:
Закрыта.