例如,3个字符串如下:
@@7##
@@563##
@@120058##
我怎样才能得到这样的数字:
echo first number是7
echo第二个数字是563
echo第三个数字是120058
非常感谢!
答案 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