You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则匹配CIDR格式IP斜杠后1-31范围数字的正确写法

错误原因分析

  • 第一个正则 //[1-3][0-9]/ 仅能匹配1039的两位数,所以单数字的`/8`无法命中,同时超出了131的取值范围要求。
  • 第二个正则 /\/[1-31]{1,2}/ 中方括号[]内的规则是匹配单个字符,[1-31]实际等价于匹配1/2/3三个字符,完全不符合数值范围匹配逻辑,所以结果错误。

正确实现代码

要匹配1~31的数值,正则需要拆分范围实现:

  1. 1~9:[1-9]
  2. 10~29:[12][0-9]
  3. 30~31:3[01]

最终的preg_match_all语句如下:

preg_match_all('/\/([1-9]|[12][0-9]|3[01])(?![0-9])/', $str, $matches);

结果说明

  • 带斜杠的完整匹配结果存放在$matches[0]中,输出为['/17', '/23', '/8', '/18']
  • 仅提取数字的话取$matches[1]即可,输出为['17', '23', '8', '18']
  • 末尾的(?![0-9])是负向先行断言,避免匹配到更长数字的前缀(比如/32不会被误匹配为/3),适配更复杂的输入场景。

内容的提问来源于stack exchange,提问作者user3052443

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:45:03