我有两个问题
我正在尝试替换两种模式之间的字符串
例如,我希望能够替换
中的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));
有更简单的方法吗?
如果有更简单的方法1.它是否可以匹配检测到的第一个模式
例如,我希望能够替换
中的some_string(pattern1)some_string(pattern2)
,前提是(pattern1)和(pattern2)是第一个遇到的模式
(pattern1)(pattern1)some_string(pattern2)(pattern2) -> replacing with replacement
会导致
(pattern1)replacement(pattern2)
答案 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)