我有以下字符串替换问题,我在这里解决了很多问题
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
,如果我对函数的输入是{{1} }},78
之前的快速需要替换为78
有人可以帮帮我吗?
答案 0 :(得分:1)
我认为正则表达式会让这很难,但您应该只能使用strpos()
,substr()
和str_replace()
来执行此操作。
使用strpos
查找字符串中的位置56和78.
然后使用substr
将字符串剪切到这些点的子字符串。
现在,将'quick'替换为正确的变量,具体取决于是否向该函数发送了56或78以及您正在处理哪个子字符串。
答案 1 :(得分:0)
不使用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
答案 2 :(得分:0)
你这样做是错误的。取决于您的函数输入,您应该使用正确的查找和替换值。只需根据函数输入值创建查找和替换值的映射。像:
$map = array(
56 => array('patterns' => array(), 'replacements' => array()),
78 => array(...)
);
答案 3 :(得分: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"