【发布时间】:2012-02-03 19:34:04
【问题描述】:
echo $string 可以给出任何文本。
如何删除单词"blank",仅当它是$string 的最后一个单词?
所以,如果我们有一个像 "Steve Blank is here" 这样的句子 - 不应该删除任何内容,否则如果句子是 "his name is Granblank",那么应该删除 "Blank" 单词。
【问题讨论】:
echo $string 可以给出任何文本。
如何删除单词"blank",仅当它是$string 的最后一个单词?
所以,如果我们有一个像 "Steve Blank is here" 这样的句子 - 不应该删除任何内容,否则如果句子是 "his name is Granblank",那么应该删除 "Blank" 单词。
【问题讨论】:
您可以使用正则表达式轻松完成。 \b 确保只有当它是一个单独的词时才会被删除。
$str = preg_replace('/\bblank$/', '', $str);
【讨论】:
$ 的用途。
试试下面的代码:
$str = trim($str);
$strlength = strlen($str);
if (strcasecmp(substr($str, ($strlength-5), $strlength), 'blank') == 0)
echo $str = substr($str, 0, ($strlength-5))
除非不需要,否则不要使用preg_match。当匹配很简单时,PHP 本身建议使用字符串函数而不是正则表达式函数。来自preg_match 手册页。
【讨论】:
ThiefMaster 说的很对。不涉及行尾$ 正则表达式字符的技术是使用rtrim。
$trimmed = rtrim($str, "blank");
var_dump($trimmed);
^ 如果你想删除字符串的最后一个字符。如果要删除最后一个单词:
$trimmed = rtrim($str, "\sblank");
var_dump($trimmed);
【讨论】:
rtrim 就更有吸引力了。
rtrim('Hello bbbbbb', 'blank') = 'Hello '。此外,它不接受正则表达式转义序列。
作为 Teez 答案的变体:
/**
* A slightly more readable, non-regex solution.
*/
function remove_if_trailing($haystack, $needle)
{
// The length of the needle as a negative number is where it would appear in the haystack
$needle_position = strlen($needle) * -1;
// If the last N letters match $needle
if (substr($haystack, $needle_position) == $needle) {
// Then remove the last N letters from the string
$haystack = substr($haystack, 0, $needle_position);
}
return $haystack;
}
echo remove_if_trailing("Steve Blank is here", 'blank'); // OUTPUTS: Steve blank is here
echo remove_if_trailing("his name is Granblank", 'blank'); // OUTPUTS: his name is Gran
【讨论】: