2

私はこのような一文を持っています:

{pattern} test {pattern} how r u {pattern}

どうすれば次{pattern}のような別の値に置き換えることができますか

{AAA} test {BBB} how r u {CCC}
4

7 に答える 7

5

毎回同じパターンを別のパターンに置き換えたい場合は、の使用を検討してpreg_replace_callback()ください。一致するたびに関数が実行され、呼び出しごとに異なる文字列を返すことができます。

$s = '{pattern} test {pattern} how r u {pattern}';

// this gets called at every match    
function replace_pattern($match)
{
    // list of replacement strings $a and a looping counter $i
    static $a = array('AAA', 'BBB', 'CCC');
    static $i = 0;

    // return current replacement string and increase counter
    return $a[$i++ % count($a)];
}

echo preg_replace_callback('/{pattern}/', 'replace_pattern', $s);

このソリューションは置換文字列を循環させるため、AAA、BBB、CCC、AAA(再び)などのように置換されます。採用する正確な戦略は異なる場合があります。

の2番目のパラメーターpreg_replace_callback()もクロージャーである可能性があります(> = 5.3)

また、宣言で通常の関数を使用する代わりに、static状態管理にオブジェクトを使用する方が適切な場合があります。

于 2012-10-17T07:11:56.187 に答える
2

次のコードを使用できます。

$str = '{pattern} test {pattern} how r u pattern {pattern}';
$repl = array('AAA', 'BBB', 'CCC');
$tok = preg_split('~(?<={)pattern(?=})~', $str);
$out = '';
for ($i=0; $i<count($tok); $i++)
   $out .= $tok[$i] . $repl[$i];
var_dump($out);

出力

string(38) "{AAA} test {BBB} how r u pattern {CCC}"
于 2012-10-17T07:10:19.593 に答える
1
$values = array(
  'aaa', // first match
  'bbb', // second match
  'ccc'  // third match
);

$subject = '{pattern} test {pattern} how r u {pattern}';

$replaced = preg_replace_callback('/\{(.*?)\}/', function($matches) use ($values) { static $i = 0; return $values[$i++];  }, $subject);

echo $replaced;
于 2012-10-17T07:13:52.800 に答える
0

正規表現に精通している場合は、preg_replaceをご覧ください。 http://php.net/manual/en/function.preg-replace.php

于 2012-10-17T06:59:23.470 に答える
0
$pattern =array("{pattern1}","{pattern2}","{pattern3}");
$replace=array("aaaaa","bbbbb","ccccc");
$string="{pattern1} test {pattern2} how r u {pattern3}";
$replaceme=str_replace($pattern,$replace,$string);
于 2012-10-17T07:00:39.570 に答える
0

使用str_replace

$haystack  = "{patternA} test {patternB} how are you {patternC}";
$search_for = array("{patternA}","{patternB}","{patternC}");
$replace_with   = array("{AAA}", "{BBB}", "{CCC}");

$new_string = str_replace($search_for, $replace_with, $haystack);
于 2012-10-17T07:00:52.083 に答える
0

これを実現する方法は明らかに複数ありますが、最も推奨される方法は正規表現を使用することです。それらは学ぶ価値がありますが、今それを学ぶ時間がない場合は、チートシートを見て、特定のタスクのニーズに合ったものを比較的短時間で作成できます。

于 2012-10-17T07:03:43.600 に答える