我的字符串中有更多的+符号,我想删除最后一个和后面的任何字符 前 Giza + badrashen + test
答案 0 :(得分:2)
您可以explode
'+'
上的join
字符串然后array_slice
忽略分割的最后一个元素(带有负数的$str
),就像这样(假设{ {1}}是你的字符串)
$result = join('', array_slice(explode('+', $str), -1));
如果您怀疑自己的字符串可能不包含'+'
,则可以先使用strpos
if(strpos($str, '+') !== false) {
$result = join('', array_slice(explode('+', $str), -1));
}
答案 1 :(得分:0)
$string = "abc1234+12+3455+xzyabc";
$string = substr($string, 0, strrpos($string,"+"));
echo $string;
> abc1234+12+3455
编辑,如果没有+
但是没有崩溃/失败,则会给出一个空字符串
EDIT2:我第一次略微误读了这个问题,我的编辑答案更简单
答案 2 :(得分:0)
一个简单的正则表达式解决方案:
假设您有Giza+badrashen+test
并希望Giza+badrashen
作为结果。
echo preg_replace("/\+[^\+]*$/", "", "Giza+badrashen+test");
试验:
var_dump(preg_replace("/\+[^\+]*$/", "", "Giza+badrashen+test"));
var_dump(preg_replace("/\+[^\+]*$/", "", "Giza+badrashen+test+"));
var_dump(preg_replace("/\+[^\+]*$/", "", "Giza"));
输出:
string(14) "Giza+badrashen"
string(19) "Giza+badrashen+test"
string(4) "Giza"
答案 3 :(得分:0)
具有负前瞻性的正则表达式可能是最紧凑的解决方案:
$myString="foo-bar+foo+foobar";
$result = preg_split("/\+(?!.*\+)/", $myString);
echo $result[0];
//result: foo-bar+foo
无需额外检查,因为如果找不到+
,它只会返回原始字符串。
值得指出的是+
必须逃脱在正则表达式的所有花朵中具有特殊意义......