如何使用PHP统计字符串中连续数字块的出现次数?
解决PHP统计字符串中连续数字块次数的问题
嘿,我来帮你搞定这个统计连续数字块的问题!先看看你代码里的问题,再给你正确的实现方案~
你的代码为什么输出0?
你写的正则表达式!/_[0-9]_/!有几个关键问题:
- 分隔符用了
!,但里面多余的/是错误的,应该去掉; [0-9]只能匹配单个数字,没法匹配像876这种连续多位的数字块;- 正则要求数字的前后必须是下划线,这就漏掉了比如
tr_766_ 756里空格后面的756这种情况。
这些问题加起来,自然匹配不到任何结果,所以输出0啦。
正确的实现方法
我们需要用正则匹配一个或多个连续的数字,对应的正则是/\d+/:
\d:等价于[0-9],匹配任意单个数字;+:表示匹配前面的元素(这里是数字)一次或多次,刚好对应连续的数字块。
用preg_match_all执行这个正则,它的返回值就是匹配到的数字块数量,直接拿来用就好。
示例代码:
// 测试你的示例字符串 $str = "RT_657_YT_89"; // 匹配所有连续数字块,结果会存在$matches数组中(如果不需要具体匹配内容可以忽略这个参数) $count = preg_match_all('/\d+/', $str, $matches); echo $count; // 输出2,对应657和89两个数字块 // 再测试你给的其他例子 $str2 = "rt_876_io_542_po_367"; echo preg_match_all('/\d+/', $str2, $matches); // 输出3 $str3 = "tr_766_ 756"; echo preg_match_all('/\d+/', $str3, $matches); // 输出2
这样就能准确统计所有连续数字块的出现次数啦!
内容的提问来源于stack exchange,提问作者Ankur Choudhury
相关产品推荐
相关产品推荐

