Как изменить первое вхождение слова в строку - PullRequest
3 голосов
/ 25 ноября 2011

Как мне изменить первое вхождение слова в строке?

Пример:

$a = "Yo! **Hello** this is the first word of Hello in this sentence";

до

$b = "Yo! **Welcome** this is the first word of Hello in this sentence";

Ответы [ 6 ]

11 голосов
/ 25 ноября 2011

Это работает, хотя и немного неэффективно:

$a = "Yo! **Hello** this is the first word of Hello in this sentence";
$a = preg_replace('/Hello/', 'Welcome', $a, 1);

Другой популярный ответ:

$b = str_replace('Hello', 'Welcome', $a, 1);

не работает.Четвертый аргумент str_replace должен быть переменной, которая передается по ссылке, и str_replace установит для нее число сделанных замен .

Лучшим решением было бы извлечьдве подстроки из входной строки:

  1. Подстрока до первого вхождения Hello, назовите ее $s1
  2. Подстрока после первого вхождения Hello, назовите его $s2

Можно использовать strpos, чтобы получить позицию.

Результат равен $s1.'Welcome'.$s2

4 голосов
/ 25 ноября 2011

Просто используйте substr дважды с strpos .

$a = "Yo! **Hello** this is the first word of Hello in this sentence";
$search = "Hello";
$replacement = "Welcome";
$b = substr( $a, 0, strpos( $a, $search)) . $replacement . substr( $a, strpos( $a, $search) + strlen( $search));

Demo

1 голос
/ 30 января 2017

Это лучшее для компактности и производительности:

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

Заменить только первое вхождение без перегрузки регулярных выражений

0 голосов
/ 05 июня 2015

Построить:

function str_replace_first($search, $replace, $source) {

  $explode = explode( $search, $source );
  $shift = array_shift( $explode );
  $implode = implode( $search, $explode );
  return $shift.$replace.$implode;

}

Позвоните:

$msg = "Yo! **Hello** this is the first word of Hello in this sentence";
echo str_replace_first( 'Hello', 'Welcome', $msg );

Попробуйте:

http://sandbox.onlinephpfunctions.com/code/399ec70333832423c79d36a42032124d5c296d27

0 голосов
/ 25 ноября 2011

Использование str_replace('Hello','Welcome',$a,1);

0 голосов
/ 25 ноября 2011

Использовать substr_replace () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...