Удалить первый символ, только если есть более 2 одинаковых символов

#php

#php

Вопрос:

Я хочу удалить двоеточие (:), если оно существует в предложении. Но если в предложении есть два или более двоеточия, я просто хочу удалить первое двоеточие.

Например :

  1. Panitera: NounAgent

  2. :: Двоеточие

Если я удалю двоеточие, первое предложение muct станет: Panitera NounAgent .

Но для второго предложения оно должно стать ->: Двоеточие

вот код :

 function removeColon($string){
    $count = substr_count($string, ':');
    if ($count == 1){
    $string = str_replace(':', '', $string); 
    }
    if ($count > 1){
    // what to do 
    }
}
  

спасибо 🙂

Ответ №1:

Вы должны подойти к этой проблеме по-другому. Прежде всего, вам все равно, сколько экземпляров : в строке — вы просто хотите заменить первый.

Итак, найдите первый символ (если он есть) с strpos помощью, а затем используйте substr для «удаления» этого символа из строки, получая части строки, которые предшествуют и следуют за ним:

 $pos = strpos($string, ':');
if ($pos === false) {
    return $string; // nothing to do
}

return substr($string, 0, $pos).substr($string, $pos   1);
  

Помните о том, как правильно проверять возвращаемое значение strpos , чтобы определить, было ли : найдено в строке — на странице документации есть большое предупреждение, потому что сделать это неправильно легко и приведет к ошибкам.

Ответ №2:

Вы можете передать limit аргумент с 1 в preg_replace, чтобы просто заменить первое вхождение в строке,

 echo preg_replace('/:/', '', $str, 1); 
  

ДЕМОНСТРАЦИЯ.

Ответ №3:

Вы должны быть в состоянии сделать это с помощью preg_replace, у него есть limit параметр:

ограничьте максимально возможные замены для каждого шаблона в каждой строке темы. По умолчанию -1 (без ограничений).

Ответ №4:

Используя регулярное выражение, вы можете делать то, что вам нравится (для соседних двоеточий). Эта функция работает для нескольких : в разных позициях в одной строке.

 function remove_first_colons($str) {
    return preg_replace('/:(:*)/', '$1', $str);
}

echo remove_first_colons('Name::: Princess');     // Name:: Princess
echo remove_first_colons('Hello: World');         // Hello World
echo remove_first_colons('A: B C::D E:::F');      // A B C:D E::F
echo remove_first_colons('Panitera: NounAgent');  // Panitera NounAgent
echo remove_first_colons(':: Colon');             // : Colon
  

Ответ №5:

попробуйте:

 preg_replace('/^:{2,}/',':',$str);