仅在字符串的末尾替换

时间:2012-01-05 23:48:14

标签: php string replace

echo $string可以提供任何文字。

如何删除单词"blank"只有$string的最后一个单词

因此,如果我们有"Steve Blank is here"之类的句子 - 不应删除任何内容,否则如果句子为"his name is Granblank",则应移除"Blank"字。

4 个答案:

答案 0 :(得分:16)

您可以使用正则表达式轻松完成。 \b确保只有在单独的单词时才删除它。

$str = preg_replace('/\bblank$/', '', $str);

答案 1 :(得分:4)

作为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

答案 2 :(得分:1)

尝试以下:

   $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_matc h手册页

答案 3 :(得分:-2)

ThiefMaster非常正确。不涉及行结束$正则表达式字符的技术是使用rtrim

$trimmed = rtrim($str, "blank");
var_dump($trimmed);

^如果你想删除字符串的最后一个字符。如果你想删除最后一个字:

$trimmed = rtrim($str, "\sblank");
var_dump($trimmed);