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

时间:2012-03-07 09:21:12

标签: php string replace substring

我想在php中搜索并替换第一个单词,如下所示:

$str="nothing inside";

在不使用substr

的情况下,通过搜索和替换将'nothing'替换为'something'

输出应该是:'内部'

8 个答案:

答案 0 :(得分:49)

使用preg_replace(),限制为1:

preg_replace('/nothing/', 'something', $str, 1);

将正则表达式/nothing/替换为您要搜索的任何字符串。由于正则表达式始终从左到右进行计算,因此它将始终与第一个实例匹配。

答案 1 :(得分:13)

在str_replace(http://php.net/manual/en/function.str-replace.php)的手册页上你可以找到这个函数

function str_replace_once($str_pattern, $str_replacement, $string){

    if (strpos($string, $str_pattern) !== false){
        $occurrence = strpos($string, $str_pattern);
        return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern));
    }

    return $string;
}

用法示例:http://codepad.org/JqUspMPx

答案 2 :(得分:3)

试试这个

preg_replace('/^[a-zA-Z]\s/', 'ReplacementWord ', $string)

它的作用是从开始到第一个空格中选择任何内容并用replcementWord替换它。在replcementWord之后注意一个空格。这是因为我们在搜索字符串中添加了\s

答案 3 :(得分:0)

preg_replace('/nothing/', 'something', $str, 1);

答案 4 :(得分:-1)

我遇到了这个问题,想要一个解决方案,这对我来说并不是100%正确,因为如果字符串就像$str = "mine'this那样,那么这个问题就会引起问题。所以我提出了一个小问题:

$stick='';
$cook = explode($str,$cookie,2);
        foreach($cook as $c){
            if(preg_match("/^'/", $c)||preg_match('/^"/', $c)){
                //we have 's dsf fds... so we need to find the first |sess| because it is the delimiter'
                $stick = '|sess|'.explode('|sess|',$c,2)[1];
            }else{
                $stick = $c;
            }
            $cookies.=$stick;
        }

答案 5 :(得分:-1)

这会检查并缓存一个命令中的第一个子串位置,如果存在,则替换它,应该更紧凑和更高性能:

if(($offset=strpos($string,$replaced))!==false){
   $string=substr_replace($replaced,$replacer,$offset,strlen($replaced));
}

答案 6 :(得分:-3)

This function str_replace是您正在寻找的。

答案 7 :(得分:-3)

ltrim()将删除字符串开头的不需要的文本。

$do = 'nothing'; // what you want
$dont = 'something'; // what you dont want
$str = 'something inside';
$newstr = $do.ltrim( $str , $dont);
echo $newstr.'<br>';