Несколько замен строк в одной и той же строке в php - PullRequest
0 голосов
/ 10 апреля 2009

У меня возникла следующая проблема с заменой строк, и я нахожусь в состоянии полного исправления здесь

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

Может кто-нибудь помочь мне с этим?

Ответы [ 4 ]

1 голос
/ 10 апреля 2009

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

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

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

  • Теперь замените 'quick' на правильную переменную, в зависимости от того, было ли отправлено 56 или 78 функции и с какой подстрокой вы имеете дело.

0 голосов
/ 19 сентября 2013

Попробуйте это:

$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"
0 голосов
/ 10 апреля 2009

Вы делаете это неправильно. Вместо этого, в зависимости от ввода вашей функции, вы должны использовать правильные значения поиска и замены. Просто создайте карту поиска и замены значений в зависимости от входного значения вашей функции. Как:

$map = array(
  56 => array('patterns' => array(), 'replacements' => array()),
  78 => array(...)
);
0 голосов
/ 10 апреля 2009

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