使用 preg_match 将字符串中的数字存储在数组中

我需要检测在字符串中找到数字的次数。如果字符串是"1 ssdsdsd 2"我需要一个数组[1,2]。如果字符串是"1 a"我需要一个数组,例如:[1].


通过我的以下尝试,我很接近,但我最终在那里得到了重复的数字。Preg match 似乎更适合我的需要,但也可以重复匹配。


知道这是为什么吗?我很感激有关如何完成此任务的任何建议。


输入


  preg_match_all("/([0-9]+)/", trim($s), $matches); //$s = "1 2", output below

  //preg_match("/([0-9]+)/", trim($s), $matches); //$s = "1 .", outputs [1,1]

输出


Array

(

    [0] => Array

        (

            [0] => 1

            [1] => 2

        )

    [1] => Array

        (

            [0] => 1

            [1] => 2

        )

)


海绵宝宝撒
浏览 160回答 3
3回答

慕容森

删除捕获组,preg_match_all("/[0-9]+/", trim($s), $matches);匹配数组中的第一个元素是正则表达式的完全匹配,第二个是捕获组。

莫回无

preg_split()是这项工作的理想工具,因为它将返回一个扁平的索引数字数组。用于\D+在出现一次或多次非数字字符时分解。使用函数标志确保输出数组中没有空元素——这消除了提前修剪的需要。代码:(演示)var_export(    preg_split(        '/\D+/',        $s,        0,        PREG_SPLIT_NO_EMPTY    ));

一只甜甜圈

您可以选择删除所有非数字字符并获取strlen()echo strlen(preg_replace('/[^0-9]/', '', '1 ssdsdsd 2')); // 2 digitsecho strlen(preg_replace('/[^0-9]/', '', '1 ssd324sd567s.d6756 2')); // 12 digitsecho strlen(preg_replace('/[^0-9]/', '', '123456789')); // 9 digits如果你知道 PHP 字符串可以通过它们的索引位置访问,那么你可以使用类似的东西:echo preg_replace('/[^0-9]/', '', '9 ssdsdsd 5')[0]; // outputs 9 because the resulting string is '95' and position zero's value is 9
打开App,查看更多内容
随时随地看视频慕课网APP