0

次の文字列置換の問題があり、ここでかなり修正されています

PFB サンプル文字列

$string = 'The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog.';

$patterns[0] = '/quick/';
$patterns[1] = '/quick/';
$patterns[2] = '/fox/';

$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';

echo preg_replace($patterns, $replacements, $string);   

送信する数字に応じて「クイック」を置き換える必要があります

つまり、関数への入力が の場合56quickbefore56を に置き換える必要がありbear、関数への入力が の場合、78前のクイック78を に置き換える必要がありますblack

誰かがこれで私を助けてくれますか?

4

4 に答える 4

1

正規表現を使用するとこれが難しくなると思いますが、、、およびを使用するだけstrpos()で実行できるはずです。substr()str_replace()

  • strpos56と78の文字列内の場所を見つけるために使用します。

  • 次に、を使用して、これらのポイントで文字列をサブ文字列に分割しsubstrます。

  • ここで、56または78が関数に送信されたかどうか、および処理しているサブストリングに応じて、「quick」を正しい変数に置き換えます。

于 2009-04-10T13:16:18.783 に答える
0

を使用する代わりにpreg_replace、を使用substr_replaceして文字列の置換とstrposを実行し、渡したパラメータに基づいて文字列内の開始点と終了点を見つけます。パターンは単純な文字列であるため、正規表現は必要ありません。substr_replaceを使用すると、文字列内で開始点と終了点を指定して、置換を行うことができます(これはあなたが探しているもののようです)。

編集:

あなたのコメントによると、あなたはたくさんのチェックをしなければならないようです。私はこれをテストしていないので、バグがあるかもしれませんが、次のような関数を試してください:

function replace($number, $pattern, $replacement)
{
    $input = "The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog.";
    $end_pos = strpos($input, $number);
    $output = "";
    if($end_pos !== false && substr_count($input, $pattern, 0, $end_pos))
    {
        $start_pos = strrpos(substr($input, 0, $end_pos), $pattern);
        $output = substr_replace($input, $replacement, $start_pos, ($start_pos + strlen($pattern)));
    }
    return $output;
}

この関数は次のことを行います。

  1. まず、「number」パラメータが文字列($end_pos !== false)にも存在することを確認します
  2. 文字列の先頭と数字の位置の間にパターンが少なくとも1回存在することを確認してください(substr_count($input, $pattern, 0, $end_pos)
  3. 関数を使用strrposして、サブストリング内のパターンの最後の出現位置を取得します
  4. パターンの開始位置と長さを使用して、を使用して置換文字列を挿入しますsubstr_replace
于 2009-04-10T13:15:58.080 に答える
0

あなたはそれを間違った方法でやっています。代わりに、関数の入力に応じて、正しい検索値と置換値を使用する必要があります。関数の入力値に応じて、検索値と置換値のマップを作成するだけです。好き:

$map = array(
  56 => array('patterns' => array(), 'replacements' => array()),
  78 => array(...)
);
于 2009-04-10T13:20:19.177 に答える
0

これを試して:

$searchArray = array("word1", "sound2", "etc3");
$replaceArray = array("word one", "sound two", "etc three");
$intoString = "Here is word1, as well sound2 and etc3";
//now let's replace
print str_replace($searchArray, $replaceArray, $intoString);
//it should print "Here is word one, as well sound two and etc three"
于 2013-09-19T07:46:02.333 に答える