如果句子中存在冒号,我想删除冒号(:)。 但如果句子上有两个或两个以上的冒号,我只想删除第一个冒号。
例如:
Panitera:NounAgent
:: Colon
如果我删除冒号,第一句muct成为:Panitera NounAgent。
但是对于第二句,它必须变成 - > :冒号
这里是代码:
function removeColon($string){
$count = substr_count($string, ':');
if ($count == 1){
$string = str_replace(':', '', $string);
}
if ($count > 1){
// what to do
}
}
谢谢你:)
答案 0 :(得分:3)
你应该以不同的方式解决这个问题。首先,您不关心字符串中有多少:
个实例 - 您只想替换第一个实例。
因此,请使用strpos
找到第一个(如果有),然后使用substr
来"删除"通过获取字符串中前面和后面的部分,从字符串中获取该字符:
$pos = strpos($string, ':');
if ($pos === false) {
return $string; // nothing to do
}
return substr($string, 0, $pos).substr($string, $pos + 1);
请注意如何正确检查strpos
的返回值以确定是否在字符串中找到:
- 文档页面中有一个很大的警告,因为这样做不正确容易并且会导致错误。
答案 1 :(得分:1)
答案 2 :(得分:0)
您应该可以使用preg_replace执行此操作,它具有limit
参数:
限 每个主题字符串中每个模式的最大可能替换。默认为-1(无限制)。
答案 3 :(得分:0)
使用正则表达式,您可以执行您喜欢的操作(对于相邻的冒号)。此函数适用于同一字符串中不同位置的多个:
。
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
答案 4 :(得分:0)
尝试:
preg_replace('/^:{2,}/',':',$str);