多个字符串替换在相同的字符串在PHP
问题描述:
我有以下字符串替换的问题,我在这里很修复多个字符串替换在相同的字符串在PHP
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);
我需要更换“快”视上号我送
也就是说,如果我输入的功能是56
,在quick
前56
需要与bear
,如果我输入的功能是78
,T被替换他之前快速78
需要更换为black
有人可以帮我这个吗?
答
除了使用preg_replace
之外,还可以使用substr_replace
来替换字符串,并使用strpos根据传递的参数找到字符串中的起点和终点。你的模式是一个简单的字符串,所以它不需要一个正则表达式,并且substr_replace将允许你在字符串中指定一个开始和结束点来做替换(这似乎是你正在寻找的)。
编辑:
基于您的评论,这听起来像你必须做很多检查。我没有测试过这一点,所以它可能有一个bug或两个,但尝试这样的功能:
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;
}
此功能如下:
- 首先,检查“数”参数甚至在字符串中是否存在(
$end_pos !== false
) - 检查您的模式在字符串的开头德和数字的位置(
substr_count($input, $pattern, 0, $end_pos)
) - 使用
strrpos
功能之间至少存在一次拿到拉斯维加斯的位置子串 - 使用起始位置和模式的长度内模式的牛逼发生插入使用
substr_replace
答
我认为,正则表达式将会使这个困难的替换字符串,但你应该能够做到这一点仅使用strpos()
,substr()
和str_replace()
。
使用
strpos
找到56串和78然后把绳剪断成使用
substr
在这些点串中的位置。现在,将'quick'替换为正确的变量,具体取决于56或78是否发送给函数以及您正在处理哪个子字符串。
答
你这样做是错误的。取决于你的函数输入,你应该使用正确的查找和替换值。根据您的功能输入值创建查找和替换值的映射。像:
$map = array(
56 => array('patterns' => array(), 'replacements' => array()),
78 => array(...)
);
答
试试这个:
$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"
嗨丰富, 这只是一个样本字符串和输入的,要被替换字符串的数量和替换字符串我不知道开始部分。 我试过用substr_replace和strpos,但回到了正方形 – gnanesh 2009-04-10 13:20:03