Domanda

Vorrei sostituire solo parole complete utilizzando PHP

Esempio: Se ho

$text = "Hello hellol hello, Helloz";

e l'uso I

$newtext = str_replace("Hello",'NEW',$text);

Il nuovo testo dovrebbe essere simile

  

NEW hello1 ciao, Helloz

ritorna PHP

  

NEW hello1 ciao, Newz

Grazie.

È stato utile?

Soluzione

Si desidera utilizzare le espressioni regolari. Il \b corrisponde a un limite di parola.

$text = preg_replace('/\bHello\b/', 'NEW', $text);

Se $text contiene testo UTF-8, si dovrà aggiungere il modificatore Unicode "u", in modo che i caratteri non latini non vengono male interpretate come confini di parola:

$text = preg_replace('/\bHello\b/u', 'NEW', $text);

Altri suggerimenti

parola multipla nella stringa sostituita dalla presente

    $String = 'Team Members are committed to delivering quality service for all buyers and sellers.';
    echo $String;
    echo "<br>";
    $String = preg_replace(array('/\bTeam\b/','/\bfor\b/','/\ball\b/'),array('Our','to','both'),$String);
    echo $String;

Array la sostituzione: Nel caso in cui le stringhe di sostituzione stanno sostituendo l'altro, è necessario preg_replace_callback .

$pairs = ["one"=>"two", "two"=>"three", "three"=>"one"];

$r = preg_replace_callback(
    "/\w+/",                           # only match whole words
    function($m) use ($pairs) {
        if (isset($pairs[$m[0]])) {     # optional: strtolower
            return $pairs[$m[0]];      
        }
        else {
            return $m[0];              # keep unreplaced
        }
    },
    $source
);

Ovviamente / per /\w+/ efficienza potrebbe essere sostituito con una chiave-list /\b(one|two|three)\b/i.

È inoltre possibile utilizzare libreria T-Regx , che le quotazioni $ o caratteri \ durante la sostituzione

<?php
$text = pattern('\bHello\b')->replace($text)->all()->with('NEW');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top