我有两个问题
- 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函数。