替换php中两个模式之间的字符串


Replace string in between two pattern in php

我有两个问题

    1.

我正在尝试替换两个模式之间的字符串

例如,我希望能够替换中的some_string

(pattern1)some_string(pattern2)

现在我正在获取两个模式的索引,并将substr_replace用于任务

$base_url = 'pattern1_some_string&pattern2'
if (preg_match('/pattern1/', $base_url, $start, PREG_OFFSET_CAPTURE) == 1 &&
            preg_match('/&pattern2/', $base_url, $end, PREG_OFFSET_CAPTURE)){
            $start = $start[0][1];
            $end = $end[0][1];
            $starting_offset = strlen('pattern1') + 1;
            $start_index = $start + $starting_offset;
            $replacement_range = $end - $start_index - 1;
            var_dump(substr_replace($base_url, "replacement", $start_index, $replacement_range));

有更简单的方法吗?

    2.

如果有一种更简单的方法可以做到1,它能与检测到的图案中的第一个相匹配吗

例如,我希望能够替换中的some_string

(pattern1)some_string(pattern2)

,条件是(图案1)和(图案2)是第一个遇到的图案

(pattern1)(pattern1)some_string(pattern2)(pattern2) -> replacing with replacement

会导致

(pattern1)replacement(pattern2)

关于问题1,更简单的方法是使用preg_replace:

$base_url = 'pattern1_some_string&pattern2';
$reg = '/^(.*?pattern1).*(&pattern2.*)$/';
$replace = "MY_STRING";
$str = preg_replace($reg, "$1" . $replace . "$2", $base_url);
echo $str; //pattern1MY_STRING&pattern2

这里有一个的工作示例

关于问题2我不太理解(不是同一个问题1?)。如果没有,你能更详细地解释一下吗?

更新:

如果你想要一个更动态的过程,这里有一个函数:

function getReplaced($subject, $pattern1, $pattern2, $replace){
    $reg = '/^(.*?' . preg_quote($pattern1) . ').*(' . preg_quote($pattern2) . '.*)$/';
    return preg_replace($reg, "$1" . $replace . "$2", $subject);
}

u应该查找preg_replace_callback函数。