在PHP

2016-01-04 61 views
-1

替换字符串两种模式之间我有两个问题在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) 
+0

快速评论downvote背后的理性将有助于提高问题的质量。 – testing

+0

我得到了问题1的答案,但它有点棘手。这里的问题1答案:http://pastebin.com/Gsv19L85,如果你尝试一点点找出问题的答案会出现:D ahha –

+1

我不知道downvote,但事实上,你开始“我有两个问题”可能无济于事。请给每个问题一个问题。 – Ajean

回答

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工作的例子

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

UPDATE:

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

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

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

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

} 
0

ü应该看preg_replace_callback功能。