在具有preg_match的数组中的字符串中找到商店编号

问题描述 投票:0回答:2

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

[通过下面的尝试,我很接近,但是最后我发现那里有重复的数字。预赛似乎更适合我的需要,但也可以重复比赛。

知道为什么会这样吗?感谢您对如何完成此操作的任何建议。

输入

  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
        )
)
php regex preg-match preg-match-all
2个回答
2
投票

删除捕获组,

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

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


0
投票

您可以选择删除所有非数字字符并获取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
© www.soinside.com 2019 - 2024. All rights reserved.