为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
海绵宝宝撒 2022-05-27 10:29:53
我需要检测在字符串中找到数字的次数。如果字符串是"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        ))
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

删除捕获组,

preg_match_all("/[0-9]+/", trim($s), $matches);

匹配数组中的第一个元素是正则表达式的完全匹配,第二个是捕获组。


查看完整回答
反对 回复 2022-05-27
?
莫回无

TA贡献1865条经验 获得超7个赞

preg_split()是这项工作的理想工具,因为它将返回一个扁平的索引数字数组。


用于\D+在出现一次或多次非数字字符时分解。使用函数标志确保输出数组中没有空元素——这消除了提前修剪的需要。


代码:(演示)


var_export(

    preg_split(

        '/\D+/',

        $s,

        0,

        PREG_SPLIT_NO_EMPTY

    )

);


查看完整回答
反对 回复 2022-05-27
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您可以选择删除所有非数字字符并获取strlen()


echo strlen(preg_replace('/[^0-9]/', '', '1 ssdsdsd 2')); // 2 digits

echo strlen(preg_replace('/[^0-9]/', '', '1 ssd324sd567s.d6756 2')); // 12 digits

echo 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


查看完整回答
反对 回复 2022-05-27
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号