Удалить только первое слово из заданной строки - PullRequest
2 голосов
/ 06 марта 2011

Я пытаюсь удалить первое слово из заданной строки. Я уже закончил ...

$word = 'removeMe|meow|whatever';

$needle = 'removeMe';
$haystack = ''; // To replace with.

$word = str_replace( $needle, $haystack, $word );

Работает отлично, но проблема в том, что $ word что-то вроде этого ...

$word = 'removeMe|meow|removeMe|whatever';

Я не хочу удалять вторую $ иглу . Возможно ли это и как? )

Ответы [ 6 ]

3 голосов
/ 06 марта 2011

PHPs preg_replace поддерживает это напрямую через параметр limit

вроде:

# now: removeMe|meow|removeMe|whatever

$word = preg_replace("/$needle/", $haystack, $word, 1);

# now: |meow|removeMe|whatever

Если ваша игла появляется только в начале , sth.как простой

$word = preg_replace("/^$needle/", $haystack, $word);

должно быть достаточно.

С уважением

rbo

1 голос
/ 24 сентября 2012

Третий параметр функции разнесения ограничивает, сколько раз слово будет разделено. Это позволило мне получить очень чистое решение. От php.net :

Если предел установлен и положительный, возвращаемый массив будет содержать максимум предельных элементов с последним элементом, содержащим остаток строка.

$split = explode('|', $word, 2);
$word = $split[1];
1 голос
/ 06 марта 2011

Я бы сделал что-то вроде этого:

$words = explode('|', $word);
if ($words[0] === $needle) {
    unset($words[0]);
}
$word = implode('|', $words);
0 голосов
/ 06 марта 2011

Я собирался взорваться, взорваться, но это лучше и короче.Однако первый символ канала будет оставлен.

echo $ string = strstr ($ string, '|');

Если ваша строка разделена пробелами, просто замените трубу пробелом

0 голосов
/ 06 марта 2011

К сожалению, PHP не поддерживает это по умолчанию. Вот функция, которая делает это:

function str_replace_once($needle, $replace, $haystack){
    $pos = strpos($haystack, $needle);
    if ($pos === false) {
        return $haystack;
    }
    return substr_replace($haystack, $replace, $pos, strlen($needle));
}

Если вы хотите заменить текст только в начале строки:

$str = preg_replace('/^'.preg_quote($word, '/').'/', '', $str);

Если ваша строка на самом деле является списком, разделенным |, см. Ответ @ lonesomeday.

0 голосов
/ 06 марта 2011

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

$index = strpos($word, '|');
$word = substr($word, 0, $index);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...