2009-04-10 164 views
0

我有以下字符串替换的问题,我在这里很修复多个字符串替换在相同的字符串在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,在quick56需要与bear,如果我输入的功能是78,T被替换他之前快速78需要更换为black

有人可以帮我这个吗?

回答

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; 
} 

此功能如下:

  1. 首先,检查“数”参数甚至在字符串中是否存在($end_pos !== false
  2. 检查您的模式在字符串的开头德和数字的位置(substr_count($input, $pattern, 0, $end_pos)
  3. 使用strrpos功能之间至少存在一次拿到拉斯维加斯的位置子串
  4. 使用起始位置和模式的长度内模式的牛逼发生插入使用substr_replace
+0

嗨丰富, 这只是一个样本字符串和输入的,要被替换字符串的数量和替换字符串我不知道开始部分。 我试过用substr_replace和strpos,但回到了正方形 – gnanesh 2009-04-10 13:20:03

1

我认为,正则表达式将会使这个困难的替换字符串,但你应该能够做到这一点仅使用strpos(),substr()str_replace()

  • 使用strpos找到56串和78

  • 然后把绳剪断成使用substr在这些点串中的位置。

  • 现在,将'quick'替换为正确的变量,具体取决于56或78是否发送给函数以及您正在处理哪个子字符串。

0

你这样做是错误的。取决于你的函数输入,你应该使用正确的查找和替换值。根据您的功能输入值创建查找和替换值的映射。像:

$map = array(
    56 => array('patterns' => array(), 'replacements' => array()), 
    78 => array(...) 
); 
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"