仅当有超过2个相同的字符时才删除第一个字符

时间:2014-06-16 08:50:19

标签: php

如果句子中存在冒号,我想删除冒号(:)。 但如果句子上有两个或两个以上的冒号,我只想删除第一个冒号。

例如:

  1. Panitera:NounAgent

  2. :: Colon

  3. 如果我删除冒号,第一句muct成为:Panitera NounAgent。

    但是对于第二句,它必须变成 - > :冒号

    这里是代码:

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

5 个答案:

答案 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)

您可以将limit参数与preg_replace中的1一起传递,只替换字符串中的第一个匹配项,

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

DEMO

答案 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);