删除字符串的一部分,但仅当它位于字符串末尾时

2022-08-30 08:05:25

我需要删除字符串的子字符串,但仅当它位于字符串的末尾时。

例如,删除以下字符串末尾的“字符串”:

"this is a test string" ->  "this is a test "
"this string is a test string" - > "this string is a test "
"this string is a test" -> "this string is a test"

任何想法的?可能是某种preg_replace,但如何??


答案 1

您会注意到字符的用法,它表示字符串的结尾:$

$new_str = preg_replace('/string$/', '', $str);

如果字符串是用户提供的变量,则最好先通过preg_quote运行它:

$remove = $_GET['remove']; // or whatever the case may be
$new_str = preg_replace('/'. preg_quote($remove, '/') . '$/', '', $str);

答案 2

如果子字符串具有特殊字符,则正则表达式可能会失败。

以下内容将适用于任何字符串,并遵循内置字符串函数使用的约定:

function right_trim(string $haystack, string $needle): string {
    $needle_length = strlen($needle);
    if (substr($haystack, -$needle_length) === $needle) {
        return substr($haystack, 0, -$needle_length);
    }
    return $haystack;
}

推荐