如何从特殊字符串中获取数字? PHP

时间:2014-08-28 08:04:57

标签: php

例如,3个字符串如下:

@@7##

@@563##

@@120058##

我怎样才能得到这样的数字:

echo first number是7

echo第二个数字是563

echo第三个数字是120058

非常感谢!

3 个答案:

答案 0 :(得分:2)

$numberAsString = trim($string, '@#')

在这种情况下可能是最简单和最快的。在这种情况下,输出仍然是一个字符串,但在大多数情况下,这并不重要。如果是这样,您可以使用(int)(float)等将其设置为正确的类型。

当然,正则表达式也是可能的,例如:

$didMatch = preg_match('/@+([^#]+)#+/', $string, $matches);

另一种可能性仍然是首先在初始2 @之后提取剩余部分,然后转换为数字,在这种情况下似乎总是int:

$number = (int)substr($string, 2);

另一种可能性是按字符数计算,只需使用substr:

$numberAsString = substr($string, 2, -2);

或者你可以有创意并使用像爆炸+内爆+数组函数这样的东西:

$numberAsString = array_slice(explode('#', implode('', array_slice(explode('@', $string), 2))), 0, -2);

当然,最后一个纯粹是为了表明它可以通过各种方式完成,因为它非常低效且不切实际,但肯定还有其他几十种方式。

如果您在紧密循环或性能真正重要的地方使用它,我会对不同的可能性进行基准测试 - 在猜测中,我会说修剪或纯子串解决方案将是最快的。

答案 1 :(得分:1)

$str = "@@563##";
preg_match("|\d+|", $str, $res);
print_r($res);

答案 2 :(得分:0)

只需调用filter_var()函数,它只会返回数字。

无论输入是什么,它都只会为您过滤数字!

    filter_var("@@120058##", FILTER_SANITIZE_NUMBER_INT) // return 120058
    filter_var("*##20kkk", FILTER_SANITIZE_NUMBER_INT) // return 20