2009-04-10 4 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, то quick до 56 должен быть заменен с bear и если мой вклад в функции 78, т он быстро до 78 необходимо заменить на black

Может кто-нибудь, пожалуйста, помогите мне с этим?

ответ

0

Вместо того, чтобы работать с preg_replace, используйте substr_replace, чтобы выполнить замену строки и strpos, чтобы найти начальную и конечную точки в строке на основе параметров, которые вы передаете. Ваш шаблон представляет собой простую строку, поэтому для него не требуется регулярное выражение, а substr_replace позволит вам указать начальную и конечную точку внутри строки для замены (что, похоже, является тем, что вы ищете).

EDIT:

Основываясь на ваш комментарий, это звучит, как вы должны делать много проверки. Я не проверял это, так что это может быть ошибка или два, но попробовать такую ​​функцию:

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. Убедитесь, что ваш шаблон существует по крайней мере один раз в период между Teh начала строки и позиции числа (substr_count($input, $pattern, 0, $end_pos))
  3. Используйте strrpos функцию, чтобы получить позицию лаз т вхождение шаблона в подстроки
  4. Используйте начальное положение и длина шаблона, чтобы вставить строку замены, используя substr_replace
+0

Привет богатым, Это просто строка образец, и я не знаю, начать участие как входы число, строка, которая будет заменена, и замена строки , Я попробовал это, используя substr_replace и strpos, но вернулся к квадрату – gnanesh

1

Я думаю, что регулярные выражения будет сделать это трудно, но вы должны быть в состоянии сделать это используя только strpos(), substr() и str_replace().

  • Используйте strpos, чтобы найти место в строке 56 и 78.

  • Затем разрезать строку вверх на подстроки в этих точках с использованием substr.

  • Теперь замените «быструю» на правильную переменную, в зависимости от того, было ли отправлено 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" 

 Смежные вопросы

  • Нет связанных вопросов^_^