Php 仅在字符串末尾替换
Php 仅在字符串末尾替换,php,string,replace,Php,String,Replace,echo$string可以给出任何文本 如何删除单词“blank”,仅当它是$string的最后一个单词时 因此,如果我们有一个像“Steve Blank在这里”这样的句子,没有什么不应该被删除,否则如果这个句子是“他的名字是Granblank”,那么“Blank”单词应该被删除。你可以使用正则表达式轻松地完成。\b确保仅当它是一个单独的单词时才将其删除 $str = preg_replace('/\bblank$/', '', $str); 请尝试以下代码: $str = trim($str
echo$string
可以给出任何文本
如何删除单词“blank”
,仅当它是$string
的最后一个单词时
因此,如果我们有一个像“Steve Blank在这里”这样的句子,没有什么不应该被删除,否则如果这个句子是“他的名字是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\u match
。当匹配简单时,PHP本身建议使用字符串函数而不是正则表达式函数。从h手册页上看。ThiefMaster非常正确。一种不涉及行尾字符$
regex的技术是使用
^如果要删除字符串的最后一个字符,则需要执行此操作。如果要删除最后一个单词:
$trimmed = rtrim($str, "\sblank");
var_dump($trimmed);
作为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
我觉得有点太复杂了。不复杂,然后做正则表达式和单独的函数。你可以通过分步做来简化。我们只是在使用内置的软件。是的,但是考虑这个解决方案与可接受的答案相比的可维护性…这个代码将替换所有的“空白”,只要它是最后一个出现在字符串中就应该替换。这就是
$
的作用。@Steve你试过这个代码吗?它适用于您建议的用例。$仅在字符串末尾为空时表示匹配。尽管在您的特定用例中,正则表达式应该是/blank$/,因为您不关心单词边界。不会在字符串末尾的“Granblank”之类的单词中替换“blank”。他自己的定义是“仅当它是$string的最后一个单词时”而不是“仅当它是字符串的最后一个字符时”。已编辑。如果是这样的话,rtrim
就更吸引人了。这就是你要求的,你说的是如果字符串的最后一个字是blank,而不是“如果字符串以‘blank’结尾”。但是,如果是“Gran.blank”,它就会失败。@EboMike:没错,我已经编辑了以反映问题的双重性。trim/ltrim/rtrim不是这样工作的。。。第二个参数获取要删除的字符列表。所以rtrim('Hello bbbbbbbb','blank')='Hello'
。此外,它不接受正则表达式转义序列。
/**
* 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