如何实现仅当字符串末尾为"s"时删除其最后一个字符?
解决方案:只删除字符串末尾的"s"
嘿,你遇到的问题核心是没精准定位到整个字符串的末尾,之前的方法要么太粗暴(直接删最后一个字符),要么范围太广(删所有单词末尾的s),给你两个靠谱的方案:
方案1:使用正则表达式精准匹配末尾的"s"
用preg_replace的时候加上字符串结束锚点$,这样只会匹配整个字符串最后一个字符是"s"的情况,不会碰中间的单词:
$originalStr = "Sealless Tools"; $modifiedStr = preg_replace('/s$/', '', $originalStr); // 输出结果:"Sealless Tool" $str2 = "strap"; $modifiedStr2 = preg_replace('/s$/', '', $str2); // 输出结果:"strap"(因为最后一个字符是p,不会替换)
这里的/s$/意思是:匹配字符串结尾位置的"s",完美符合你的需求。
方案2:纯字符串函数判断(无正则)
如果你不想用正则,也可以用字符串截取函数先判断最后一个字符,再决定是否删除:
$str = "tests"; if (substr($str, -1) === 's') { $str = substr($str, 0, -1); } // 结果:"test" $str3 = "strap"; if (substr($str3, -1) === 's') { $str3 = substr($str3, 0, -1); } // 结果:"strap"(无变化)
substr($str, -1)会取出字符串的最后一个字符,判断等于"s"后,再用substr($str, 0, -1)截取从开头到倒数第二个字符的内容,完全可控。
之前你用substr直接删最后一个字符是因为没做判断,而之前的preg_replace应该是没加$锚点,导致匹配了所有位置的"s"(或者单词末尾的"s"),现在用这两种方法就可以精准实现需求啦~
内容的提问来源于stack exchange,提问作者KDJ
相关产品推荐
相关产品推荐

