在字符串中查找子字符串最后出现的位置,同时限制结束索引。

5

我有一个字符串

$string="abc @def @xyz $ @def @xyz";

现在我想获得$符号之前@符号的最后一次出现的索引。

目前我正在使用

strrpos($string,'@');

strrpos的第三个参数是开始索引,我们可以给结束索引吗?


好的,只需获取最后一个 $ 符号的位置作为偏移量即可。 - Rizier123
我想要查找 $ 之前 @ 的索引,考虑搜索的起始索引。 - Umair Zahid
如果字符串是"abc @def @xyz $ @def @xyz $ @bca",会怎么样? - RomanPerekhrest
2个回答

5

使用 strrpos 函数可以得到最后一次出现的位置。更多信息请参见function.strrpos

针对您的目的,您需要使用 $ 将字符串分解,并从分解后数组的第一个 index 开始应用 strrpos

试试这个:

$string="abc @def @xyz $ @def @xyz";
$strArr = explode('$', $string);
$pos = strrpos($strArr[0], "@");

if ($pos === false) { // note: three equal signs
    echo 'Not Found!';
}else
    echo $pos; //Output 9 this case

2
另一种选择是:-
$string="abc @def @xyz $ @def @xyz";
$pos = strrpos($string, '@', -strrpos($string, '$')); 
if($pos === false){ 
    echo 'Not Found!';
}else{
    echo $pos; // 9
}

注意:负号将返回$符号前最后一个 @ 符号的索引。


1
我认为这个解决方案比先将字符串分解更加优雅。 - brense

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接