php从第n个位置替换第一次出现的字符串

时间:2017-06-12 11:58:52

标签: php

我有字符串:

$a="some some next some next some some next";

我希望从位置 n 开始删除一次'next'

substr_replace可以设置偏移量,但在此之后接受所有内容,这是错误的。

preg_replace无法从偏移开始,这也是错误的。

如何做到这一点?

4 个答案:

答案 0 :(得分:0)

使用此代码:

<?php
$a="some some next some next some some next";
$n = 0;
$substring = 'next';

$index = strpos($a,$substring);
$cut_string = '';
if($index !== false)
$cut_string = substr($a, $index + strlen($substring));

var_dump($cut_string);
?>

答案 1 :(得分:0)

您可以使用substr()在偏移n之后获取字符串的其余部分,然后将结果传递给str_replace()

$input = 'some some some next next some some next some.';
$offset = 5; // Example offset
$toBeReplaced = 'next';
$replacement = ''; // Empty string as you want to remove the occurence
$replacedStringAfterOffset = str_replace($toBeReplaced, $replacement, substr($input, $offset), 1); // The 1 indicates there should only one result be replaced

$replacedStringAfterOffset现在包含指定偏移量之后的所有内容,因此现在必须将偏移量(未更改)之前的部件与偏移量之后的部件(已更改)连接起来:

$before = substr($input, 0, $offset - 1);
$after = $replacedStringAfterOffset;
$newString = $before . $after;

$newString现在包含您要查找的内容。

答案 2 :(得分:0)

请参阅下面的我的功能

<?php

echo $a="some some next some next some some next";


$cnt = 0;

function nthReplace($search, $replace, $subject, $n, $offset = 0) {
    global $cnt;  
    $pos = strpos($subject, $search , $offset); 
    if($cnt == $n){
        $subject = substr_replace($subject, $replace, $pos, strlen($search));

    } elseif($pos !== false){
        $cnt ++;
        $subject = nthReplace($search, $replace, $subject, $n, $offset+strlen($search));
    } 
    return $subject;
}

 echo  $res = nthReplace('next', '', $a,1); 

答案 3 :(得分:0)

据我所知,给定的位置是字符串中某个字符的位置。因此,您需要将第3个参数设置为第一次出现的位置&#34; next&#34;在给定的位置之后。你可以这样做:$ position = strpos($ a,&#34; next&#34;,$ position);

substr_replace函数的第4个参数取代要替换的字符数。您可以将其设置为字符串&#34; next&#34;中的字符数。然后它应该替换&#34; next&#34;的第n次出现。最终代码如下所示:

$replaced_string = substr_replace($a, $replacement, strpos($a, "next", $position), strlen("next"));