大家好我需要一个特殊类型的字符串替换在PHP中。 我需要用两个不同的单词替换一个单词。
例如:在字符串“嗨妈妈,嗨爸爸”中,我需要自动用另外两个不同的单词“hi”替换,例如“mary”和“john”。因此,如果只有一次出现“Hi”,则只替换为“mary”,但如果有多个则使用所有关联词。
因此,根据单词出现的次数,更换一个单词。 感谢所有能帮助我的人!
答案 0 :(得分:3)
preg_replace_callback
可让您控制每次替换。
答案 1 :(得分:0)
您可以通过多次调用preg_replace
来完成此操作,为每次调用指定限制为1:
$string = "Hi mom, hi dad";
preg_replace('/hi/i', 'mary', $str, 1); // "mary mom, hi dad"
preg_replace('/hi/i', 'john', $str, 1); // "mary mom, john dad"
您可以使用以下内容对此进行概括。它需要一个主题,一个模式,以及一个或多个替换单词。
function replace_each($subject, $pattern, $replacement) {
$count = 0;
for ($i = 2; $i < func_num_args(); ++$i) {
$replacement = func_get_arg($i);
$subject = preg_replace($pattern, $replacement, $subject, 1, $count);
if (!$count)
// no more matches
break;
}
return $subject;
}
$string = preg_replace_each("Hi mom, hi dad", "/hi/i", "mary", "john");
echo $string; // "mary mom, john dad"
答案 2 :(得分:0)
preg_replace_callback是一种方式,另一种方法是利用preg_replace的$ limit和$ count参数(参见manpage)
$str = "hi foo hi bar hi baz hi quux";
$repl = array('uno', 'dos', 'tres');
do{
$str = preg_replace('~hi~', $repl[0], $str, 1, $count);
$repl[] = array_shift($repl); // rotate the array
} while($count > 0);
答案 3 :(得分:0)
我不确定是否有一种非常简单的方法可以做到这一点但是看看我刚写的这段代码。这应该可以解决你的问题:)
<?php
class myReplace{
public $replacements = array();
protected $counter = 0;
public function __construct($replacements) {
// fill the array with replacements
$this->replacements = $replacements;
}
public function test($matches) {
// if you want you could do something funky to the matches array here
// if the key does not exists we are gonna start from the first
// array element again.
if(!array_key_exists($this->counter, $this->replacements)) {
$this->counter = 0;
}
// this will return your replacement.
return $this->replacements[$this->counter++];
}
}
// Instantiate your class here, and insert all your replacements in sequence
$obj = new myReplace(array('a', 'b'));
// Lets start the replacement :)
echo preg_replace_callback(
"/hi/i",
array($obj, 'test'),
"Hi mom, hi dad, hi son, hi someone"
);
?>
此代码将导致: 一个妈妈,一个爸爸,一个儿子,一个人