PHP子字符串到字符串中的最后一个数字

时间:2012-05-14 10:22:54

标签: php

$str = "234 567 some text following";

如何从字符串中的第三个字符串获取子字符串到最后一个数字?

EDIT
从给出的答案来看,我的问题似乎并不清楚。在上面的例子中,我想要返回子串4 567,而不是从第三个字符串返回到字符串的末尾。感谢。

第二次编辑
这只是一个示例字符串......字符串可以是文本和数字的混合。我需要将FROM从已知位置子串到最后出现的数字的位置。

5 个答案:

答案 0 :(得分:0)

你应该使用substr function

substr($str, 2);

编辑:

使用正则表达式

$pattern = '/^[0-9]+/';
preg_match($pattern, substr($str, 2), $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);

EDIT2: 测试并运作

$pattern = '/^([0-9][ ]*)+/';
preg_match($pattern, substr($str, 2), $matches);
print_r($matches);

EDIT3: 没看到你的最后编辑,建立一个新的^^

EDIT4:

$str = "234 567 some text 123 22 following 12 something";
$pattern = '/^([ ]*([0-9][ ]*)*([a-zA-Z][ ]*)*[0-9]*)*[0-9]/';
preg_match($pattern, substr($str, 2), $matches);
echo $matches[0];

给我4 567 some text 123 22 following 12

这是你期待的吗?

编辑5:

再次新的^^

'/^([0-9 :._\-]*[a-zA-Z]*[:._\-]*)*[0-9]/'

答案 1 :(得分:0)

试试这个:

substr($str,2,strlen($str));

编辑(新答案):

此代码正常运行:

$str = preg_replace( "/\D/", "", $str);
echo substr($str,2);

答案 2 :(得分:0)

<?php
  $subStr = substr($str, 2);
?>

默认情况下,长度(第三个参数)在省略时将默认为字符串的结尾。请注意,字符从0开始,因此第三个字符将位于第2位。

答案 3 :(得分:0)

您可以在正则表达式中使用negative lookahead来执行此操作。

<?php
    $lastNumber = getLastNumber("234 567 some text following");
    var_dump($lastNumber);

    function getLastNumber($string) {
        preg_match("/[0-9](?!.*[0-9])/", $string, $match);
        if (!empty($match[0])) return $match[0];
        return false;
    }
?>

编辑:对不起,我误读了;以为你想要最后一个独立的号码。

双重编辑:这似乎可以做你想要的事情

<?php
    $string = substr("234 567 some text 123 22 following", 2);
    preg_match("/[0-9 ]+/", $string, $matches);
    if (!empty($matches)) {
        $number = intval(str_replace(" ", "", $matches[0]));
        var_dump($number);
    }
?>

因为它返回“4567”。当然,您希望留出空间,只需使用$matches[0]代替$number

答案 4 :(得分:0)

我偶然发现了这一点,并认为我会分享我的解决方案。

<?php
$string = "234 567 some text following";
$start = 2;
if(preg_match_all('/\d+/', $string, $sub)){
    $lastNumber = end($sub[0]);
    $newString = substr($string,$start, strrpos($string, $lastNumber) + strlen($lastNumber) - $start);
}
echo $newString;

此行提取字符串

中的所有数字
if(preg_match_all('/\d+/', $string, $sub))

在这里我们获取最后一个数字

$lastNumber = end($sub[0]); 

然后我们使用strrpos找到最后一次出现的数字,以防最后一个数字出现多次。然后,使用该位置从起始位置提取子串到最后一个数字:

$newString = substr($string,$start, strrpos($string, $lastNumber) 
             + strlen($lastNumber) - $start);
相关问题