【问题标题】:How to replace the Last "s" with "" in PHP如何在PHP中用“”替换最后的“s”
【发布时间】:2011-02-01 20:07:33
【问题描述】:

我需要知道如何将字符串中的最后一个“s”替换为“”

假设我有一个类似 testers 的字符串,输出应该是 tester。 它应该只替换最后一个“s”而不是字符串中的每个“s” 我怎样才能在 PHP 中做到这一点?

【问题讨论】:

  • this这样的词呢,会不会是thi
  • 没错,就是这个
  • 我很好奇,为什么?另外,字符串your's 的预期输出是什么?你也希望它被转换吗?
  • 字符串的最后一个 s,位于该字符串的 any 位置,或者仅当它位于字符串的 real 末尾时。那么“测试字符串”呢?它应该变成“测试圈”吗?
  • 您的最终目标是从复数词中删除所有 S 还是仅删除 s?(以前从未需要复数形式的 s...哈哈)

标签: php string replace


【解决方案1】:
if (substr($str, -1) == 's')
{
    $str = substr($str, 0, -1);
}

【讨论】:

  • 如果 s 是最后一个字符,则仅删除它。
  • 还是?可能是因为 streetparade 需要在这个“嗨,我需要知道如何用“””替换字符串中的最后一个“s”? ;-)))
  • 如何删除"String with s not in last position" 中的最后一个s
  • 您需要先将字符串分解成单词才能完成这项工作。
  • @Felix:您可以使用任何您想要的解决方案删除,但 streetparade 只需要在字符串中的最后一个字符时删除“s”。
【解决方案2】:

您的问题有点不清楚是要从字符串末尾删除s,还是要在字符串中最后一次出现s。这是一个区别。如果您想要第一个,请使用 zerkms 提供的解决方案。

此函数从$string 中删除最后一次出现$char,无论它在字符串中的位置如何,当字符串中没有出现$char 时,返回整个字符串。 p>

function removeLastOccurenceOfChar($char, $string)
{
    if( ($pos = strrpos($string, $char)) !== FALSE) {
        return substr_replace($string, '', $pos, 1);
    }
    return $string;
}
echo removeLastOccurenceOfChar('s', "the world's greatest");
// gives "the world's greatet"

如果您的意图是变形,例如单数化/复数化单词,那么have a look at this simple inflector class 就知道该走哪条路了。

【讨论】:

  • 不错的示例,没有演示 ;-) function doanything($char, $string) { return $string; } 将以相同的方式工作,但速度更快
  • 啊,我错过了“greatest”中的“s”消失了。我需要眼镜。无论如何 - 仅当“s”位于最后一个位置时,这不会替换字符串中的“s”
  • @zerkms 我还是不明白你的意思。该函数准确地替换了 $char 的最后一个出现,而不管它在字符串中的什么位置。 OP 不清楚他是想从 end 还是 lastoccurrence 中删除“s”,这是一个区别。
【解决方案3】:
$result = rtrim($str, 's');
$result = str_pad($result, strlen($str) - 1, 's');

rtrim()

【讨论】:

  • 与 zerkms 的解决方案相比,简直是过度杀伤了 :)
【解决方案4】:

更新:好的,也可以不用正则表达式使用strrpos ans substr_replace

$str = "A sentence with 'Testers' in it";
echo substr_replace($str,'', strrpos($str, 's'), 1);
// Ouputs: A sentence with 'Tester' in it

strrpos 返回字符串最后一次出现的索引,substr_replace 替换从某个位置开始的字符串。

(这与我刚刚注意到的Gordon 提议的相同。)


到目前为止,所有答案都删除了单词的最后一个字符。但是,如果您真的想替换字符的最后出现,可以使用preg_replacenegative lookahead

$s = "A sentence with 'Testers' in it";
echo preg_replace("%s(?!.*s.*)%", "", $string );

// Ouputs: A sentence with 'Tester' in it

【讨论】:

  • 老兄,他只需要从字符串中替换 1 个字符
  • 哈哈。对你们俩+1。多么棒的答案。 @Felix,如果我问你如何在 C++ 中添加 int,你会从“好吧,首先创建一个布尔值carry 变量来存储每个位相加后的进位。”? :P
  • @zerkms:至少这正是他所要求的。
  • @incrediman:不,当然不是;)但在我看来,最好从产生预期结果的“非最佳”解决方案开始,然后从那里继续,就像使用快速解决方案一样并非在所有情况下都有效。
  • @Felix:是的 - 无论如何,这是一个有趣的正则表达式 :)
【解决方案5】:
$str = preg_replace("/s$/i","",rtrim($str));

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多