私はこのような一文を持っています:
{pattern} test {pattern} how r u {pattern}
どうすれば次{pattern}
のような別の値に置き換えることができますか
{AAA} test {BBB} how r u {CCC}
私はこのような一文を持っています:
{pattern} test {pattern} how r u {pattern}
どうすれば次{pattern}
のような別の値に置き換えることができますか
{AAA} test {BBB} how r u {CCC}
毎回同じパターンを別のパターンに置き換えたい場合は、の使用を検討して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
状態管理にオブジェクトを使用する方が適切な場合があります。
次のコードを使用できます。
$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}"
$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;
正規表現に精通している場合は、preg_replaceをご覧ください。 http://php.net/manual/en/function.preg-replace.php
$pattern =array("{pattern1}","{pattern2}","{pattern3}");
$replace=array("aaaaa","bbbbb","ccccc");
$string="{pattern1} test {pattern2} how r u {pattern3}";
$replaceme=str_replace($pattern,$replace,$string);
使用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);
これを実現する方法は明らかに複数ありますが、最も推奨される方法は正規表現を使用することです。それらは学ぶ価値がありますが、今それを学ぶ時間がない場合は、チートシートを見て、特定のタスクのニーズに合ったものを比較的短時間で作成できます。