如何提取字符串的 num 部分


How to extract num part of a string

我有一个像"我的字符串 2"这样的字符串,我喜欢只得到数字值"2"。我尝试这样做,您在下面看到,但结果为 0。

$AlphaSURV1="My String 2";
$NumSURV1=intval($AlphaSURV1);
echo $NumSURV1;

你能帮我解决这个问题吗?

谢谢

为了捕获字符串中的最后一组数字,您可以使用正则表达式:

$str = "123 test 29";
preg_match("/[0-9]+$/", $str, $matches);
var_dump($matches[0]); # 29

这适用于以下所有情况,包括缺少空格、前导数字和字符串末尾的多位数字:

"1"        => 1
"test 2"   => 2
"test 34"  => 34
"5 test 6" => 6
"7test8"   => 8

请注意,如果您只想获取字符串中的最后一个字符并将其视为数字,则可以使用以下方法:

$str = "My String 2";
$digit = intval(substr($str, -1));

您可以使用匹配非数字的正则表达式去除非数字字符:

$NumSURV1 = preg_replace("/[^0-9]/", "", $AlphaSURV1);

好吧,您对原始帖子的评论使这个答案有点无效。 如果你把"3 some text 5"放在我给出的preg_replace()答案中,你会得到"35",而不仅仅是"5"。 如果我大胆猜测并假设您只想从字符串中取出最后一段文本而不是所有数字,并且假设有空格,您应该这样做:

$exp = explode(" ", $AlphaSURV1);
$NumSURV1 = $exp[count($exp) - 1];

这很丑陋,但它会在空格上拆分您的输入字符串,并为您提供结果数组中的最后一个元素。

完成

第二个答案的更漂亮方法,感谢@nickb:

$exp = explode(" ", $AlphaSURV1);
$NumSURV1 = end($exp);

(顺便说一下,您可以按其工作方式执行$NumSURV1 = end(explode(" ", $AlphaSURV1));,但是如果您在服务器上启用了严格检查,则会收到Strict Standards: Only variables should be passed by reference错误)