#php
#php
Вопрос:
Я хочу удалить двоеточие (:), если оно существует в предложении. Но если в предложении есть два или более двоеточия, я просто хочу удалить первое двоеточие.
Например :
-
Panitera: NounAgent
-
:: Двоеточие
Если я удалю двоеточие, первое предложение 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);