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

时间:2016-01-04 23:24:10

标签: php regex

我有两个问题

    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)
      

      ,前提是(pattern1)和(pattern2)是第一个遇到的模式

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

      会导致

      (pattern1)replacement(pattern2)
      

2 个答案:

答案 0 :(得分:1)

关于问题 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

Here you have一个工作示例

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

<强>更新

如果你想要一个更加动态的过程,这里你有一个功能:

function getReplaced($subject, $pattern1, $pattern2, $replace){

    $reg = '/^(.*?' . preg_quote($pattern1) . ').*(' . preg_quote($pattern2) . '.*)$/';

    return preg_replace($reg, "$1" . $replace . "$2", $subject);

}

答案 1 :(得分:0)

你应该看看preg_replace_callback函数。