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