PHP字符串中最后一个数字的位置

7

寻找一些正则表达式来返回字符串中最后一个数字字符的位置。

$str = '1h 43 dw1r2 ow';  //Should return 10
$str = '24 h382';  //Should return 6
$str = '2342645634';  //Should return 9
$str = 'Hello 48 and good3 58 see you';  //Should return 20

这个做到了,但我正在寻找最快的方法来完成它(例如,使用正则表达式?)

function funcGetLastDigitPos($str){

    $arrB = str_split($str);

    for($k = count($arrB); $k >= 0; $k--){

        $value =    $arrB[$k];
        $isNumber = is_numeric($value);

        //IF numeric...
        if($isNumber) {

            return $k;
            break;
        }
    }

}
3个回答

6
你可以找到字符串的最后一部分没有数字, 计算它的长度, 然后将其从整个字符串的长度中减去。
$str = '1h 43 dw1r2 ow';  //Should return 10
echo lastNumPos($str); //prints 10
$str = '24 h382';  //Should return 6
echo lastNumPos($str); //prints 6
$str = '2342645634';  //Should return 9
echo lastNumPos($str);//prints  9
$str = 'Hello 48 and good3 58 see you';  //Should return 20
echo lastNumPos($str); //prints 20


function lastNumPos($string){
    //add error testing here

    preg_match('{[0-9]([^0-9]*)$}', $string, $matches);
    return strlen($string) - strlen($matches[0]);
}

4
您可以在 preg_match 中使用 PREG_OFFSET_CAPTURE 标志来捕获匹配项的索引。
$str = 'Hello 48 and good3 58 see you';
$index = -1;
if(preg_match("#\d\D*$#", $str, $matches, PREG_OFFSET_CAPTURE)) {
    $index = $matches[0][1];
}

echo $index; //returns index if there is a match.. else -1

查看 工作演示


我喜欢它!尽管你可能想把\D+改成\D*,以防最后一个字符是数字。 - wolffer-east
@wolffer-east 是的,同意。已更新。谢谢 :) - karthik manchala

0

尝试这个,虽然不是正则表达式,但应该可以工作。如果需要节省空间,可以在三元语句中插入它。

$a=is_numeric(substr($str, -1));
if($a){
    $k=substr($str, -1);
}else{
    $k='';
}
echo $k;

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