2016-10-27 2 views
2

J'ai besoin de remplacer les mots par des substituts donnés par un tableau commeComment remplacer des mots individuels dans une chaîne en PHP?

$words = array(
'one' => 1, 
'two' => 2, 
'three' => 3 
); 

$str = 'One: This is one and two and someone three.'; 

$result = str_ireplace(array_keys($words), array_values($words), $str); 

mais cette méthode change someone-some1. J'ai besoin de remplacer des mots individuels.

+0

Vous êtes absent au moins une citation, et un point-virgule. Assurez-vous de fournir des exemples de code précis afin que nous puissions vous aider efficacement. – Chris

+0

@Chris désolé, mon code réel était trop compliqué pour être copié/collé ici, j'ai écrit un simple avec typoes: p – Googlebot

+0

regex fonctionnerait mieux, mais pour le travail de la chaîne simple, je remplacerais juste «un» par «un» 'pour encapsuler les espaces. Puis changez la sortie à '1' pour correspondre. – Luke

Répondre

5

Vous pouvez utiliser word boundries dans un regex pour exiger un match de mot.

Quelque chose comme:

\bone\b 

le ferait. preg_replace avec le modificateur i est ce que vous voudriez utiliser en PHP.

Regex Démo: https://regex101.com/r/GUxTWB/1

PHP Utilisation:

$words = array(
'/\bone\b/i' => 1, 
'/\btwo\b/i' => 2, 
'/\bthree\b/i' => 3 
); 
$str = 'One: This is one and two and someone three.'; 
echo preg_replace(array_keys($words), array_values($words), $str); 

PHP Demo: https://eval.in/667239

Sortie:

1: Ceci est 1 et 2 et quelqu'un 3.

+1

Peut-être '' /\b'.implode ('\ b |', array_keys ($ words)). '\ B/i'' a juste les mots et non le motif dans le tableau. – AbraCadaver

+0

@AbraCadaver Oui, pourrait être une bonne alternative si la structure du tableau peut être modifiée. – chris85

2

Vous pouvez utiliser \ b comme limite de mot dans preg_replace:

foreach ($words as $k=>$v) { 
    $str = preg_replace("/\b$k\b/i", $v, $str); 
} 
0

Cette fonction vous aidera à remplacer certains mots mais pas les caractères en PHP. Il utilise la fonction de pré-remplacement()

<?PHP 
     function removePrepositions($text){ 

      $propositions=array('/\bthe\b/i','/\bor\b/i', '/\ba\b/i', '/\band\b/i', '/\babout\b/i', '/\babove\b/i'); 

      if(count($propositions) > 0) { 
       foreach($propositions as $exceptionPhrase) { 
        $text = preg_replace($exceptionPhrase, '', trim($text)); 

       } 
      $retval = trim($text); 

      } 
     return $retval; 
    } 

?> 

Voir la whole example