2016-10-27 11 views
2

私は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); 

として配列によって与えられた代替で言葉を交換する必要がありますが、この方法はsome1からsomeoneを変更します。私は個々の言葉を置き換える必要があります。

+0

あなたは少なくとも一つの引用、および1セミコロンが欠落している参照を使用しています。効果的に役立つように、正確なコード例を提供してください。 – Chris

+0

@Chris申し訳ありませんが、私の実際のコードはあまりに複写されすぎてここに貼り付けることができませんでした。単純な文字列の作業のために、正規表現を使うと良いでしょう。p – Googlebot

+0

スペースをカプセル化する。その後、出力を「1」に変更して一致させます。 – Luke

答えて

5

。以下のような

何か:

\bone\b 

はそれを行うだろう。 i修飾子付きのpreg_replaceは、PHPで使用したいものです。

正規表現のデモ:https://regex101.com/r/GUxTWB/1

PHPの使用法:

$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デモ:https://eval.in/667239

出力:

1:これは1と2と誰か3

です
+1

また、配列に単語でパターンを持たないために、 ''/\b'.implode(' \ b | '、array_keys($ words))。' \ b/i'' – AbraCadaver

+0

@AbraCadaver Yeaは、配列構造を変更できる場合は良い代替手段になる可能性があります。 – chris85

2

あなたはにpreg_replaceで単語の境界として、\ bを使用することができます:あなたは単語の一致を必要とするように正規表現でword boundriesを使用することができます

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

この関数は、PHPではいくつかの単語を置換するのに役立ちますが、文字は置換しません。これは、事前に置き換える()関数

<?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; 
    } 

?> 

whole example

関連する問題