php заменяет первое вхождение строки с 0-й позиции [дубликат]


На этот вопрос уже есть ответ здесь:

Я хочу найти и заменить первое слово другим в php следующим образом:

$str="nothing inside";

Замените "ничего" на "что-то" путем поиска и замены без использования substr

Вывод должен быть: "что-то внутри"

Author: mickmackusa, 2012-03-07

8 answers

Использовать preg_replace() с ограничением 1:

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

Замените регулярное выражение /nothing/ любой строкой, которую вы хотите найти. Поскольку регулярные выражения всегда вычисляются слева направо, это всегда будет соответствовать первому экземпляру.

 40
Author: Milind Ganjoo, 2012-03-07 14:58:44

На справочной странице для 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

 11
Author: mishu, 2012-03-07 09:36:25

Попробуйте это

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

Что он делает, так это выбирает что угодно от начала до первого пробела и заменяет его словом replcementWord. обратите внимание на пробел после replcementWord. это потому, что мы добавили \s в строку поиска

 3
Author: Uday Sawant, 2012-03-07 09:28:55
preg_replace('/nothing/', 'something', $str, 1);
 0
Author: trex005, 2012-03-07 09:26:37

Я обратился к этой проблеме и хотел найти решение, и это было не на 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;
        }
 -1
Author: Jayo2k, 2015-06-30 16:29:32

Это проверяет и кэширует первую позицию подстроки в одной команде, следующая замена, если она присутствует, должна быть более компактной и производительной:

if(($offset=strpos($string,$replaced))!==false){
   $string=substr_replace($replaced,$replacer,$offset,strlen($replaced));
}
 -1
Author: Luca C., 2018-07-18 16:28:13

Эта функция str_replace это тот, кого вы ищете.

 -3
Author: steveoh, 2012-03-07 09:23:53

Ltrim() удалит ненужный текст в начале строки.

$do = 'nothing'; // what you want
$dont = 'something'; // what you dont want
$str = 'something inside';
$newstr = $do.ltrim( $str , $dont);
echo $newstr.'<br>';
 -3
Author: stickmanusa, 2013-04-19 21:30:15