删除一部分string,但只有当它在string的末尾

我需要删除一个string的子string,但只有当它在string的结束。

例如,删除以下string末尾的“string”:

"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,但如何?

你会注意到$字符的使用,它表示string的结尾:

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

如果string是用户提供的variables,则首先通过preg_quote运行它是个好主意:

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

如果子string有特殊字符,则使用正则expression式可能会失败。

以下将使用任何string:

 $substring = 'string'; $str = "this string is a test string"; if (substr($str,-strlen($substring))===$substring) $str = substr($str, 0, strlen($str)-strlen($substring)); 

我想你可以使用正则expression式 ,这将匹配string ,然后, string的结尾 ,再加上preg_replace()函数。

像这样的东西应该工作得很好:

 $str = "this is a test string"; $new_str = preg_replace('/string$/', '', $str); 

备注:

  • string匹配…呃… string
  • $表示string的结尾

有关更多信息,可以阅读PHP手册的“ 模式语法”部分。

我为string的左右修剪写了这两个函数:

 /** * @param string $str Original string * @param string $needle String to trim from the end of $str * @param bool|true $caseSensitive Perform case sensitive matching, defaults to true * @return string Trimmed string */ function rightTrim($str, $needle, $caseSensitive = true) { $strPosFunction = $caseSensitive ? "strpos" : "stripos"; if ($strPosFunction($str, $needle, strlen($str) - strlen($needle)) !== false) { $str = substr($str, 0, -strlen($needle)); } return $str; } /** * @param string $str Original string * @param string $needle String to trim from the beginning of $str * @param bool|true $caseSensitive Perform case sensitive matching, defaults to true * @return string Trimmed string */ function leftTrim($str, $needle, $caseSensitive = true) { $strPosFunction = $caseSensitive ? "strpos" : "stripos"; if ($strPosFunction($str, $needle) === 0) { $str = substr($str, strlen($needle)); } return $str; } 

preg_replace和这个模式:/ string \ z / i

\ z表示string的结尾

http://tr.php.net/preg_replace

你可以使用rtrim() 。

 php > echo rtrim('this is a test string', 'string'); this is a test