PHP:从字符串中修剪子串的最佳方法

12
想要处理一组字符串,并从每个字符串的末尾删除一些以“myEnding”结尾的内容(如果存在)。最简单的方法是什么?我知道使用正则表达式可以实现所有功能,但这似乎是一个简单的任务。我想知道是否存在更简单的工具来完成这项任务。谢谢,Gidi。

你可能会发现s($str)->replaceSuffix('myEnding')很有用,这个函数可以在这个独立库中找到。 - caw
3个回答

15

我会选择使用 preg_replace 来解决这个问题。

$output = preg_replace('/myEnding$/s', '', $input);

感谢您宝贵的答案,尽管我要求非正则表达式的解决方案。 - shealtiel
1
你要求最简单的方法来完成它。在这种情况下,正则表达式是最简单的方法。 - dqhendricks
正则表达式是一个英雄 :) - userlond
1
如果您要删除的字符串(例如,myEnding)来自用户输入或其他不可信来源,请务必使用preg_quote()。因此,可以像这样编写代码:$output = preg_replace('/' . preg_quote($myEnding) . '$/s', '', $input); - marcguyer
我愿意打赌这是较慢的解决方案,正则表达式并不适用于像这样简单的任务。 - Steve Horvath

7

试试这个:

$s = "foobarmyEnding";
$toRemove = "myEnding";

$len = strlen($toRemove);
if (strcmp(substr($s, -$len, $len), $toRemove) === 0)
{
    $s = substr($s, 0, -$len);
}

ideone


这对于这样一个简单的任务来说,可能比正则表达式快得多。 - Steve Horvath

-5

4
不完全正确。rtrim 的第二个参数是要删除的字符列表,而不是整个字符串。 - TaZ
问题是“从每个字符串的结尾修剪一些' myEnding'”。 - Mike Sherman
9
如果你的字符串在"myEnding"之前直接包含这些字符中的任何一个,它们也将被剥离。让我举个例子:当你输入"HelloMikeShermanmyEnding"时,你期望输出为"HelloMikeSherman",但实际上输出会是"HelloMikeSherma"!因为"n"是提供给rtrim函数作为字符列表的一部分。 - TaZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接