如何用preg_match检测字符串中是否存在/number/number/格式内容?
用preg_match检测/数字/数字/格式的解决方案
嘿,我来帮你搞定这个preg_match的写法问题!你需要检测的是类似/2018/02/这种/数字/数字/的格式,这里我分基础检测和严格验证两种情况给你说明:
基础格式检测(仅匹配结构)
如果只是要确认目标字符串中存在/四位数字/两位数字/的结构,不需要验证数字是否合理(比如月份是否在01-12之间),可以用这个正则:
$target = "你的目标字符串,比如包含/2018/02/的文本"; // 用~作为分隔符,避免转义匹配内容里的/,可读性更好 $pattern = '~/\\d{4}/\\d{2}/~'; if (preg_match($pattern, $target)) { echo "找到了符合格式的内容!"; } else { echo "没有匹配到目标格式"; }
代码解释:
~:正则的分隔符,你也可以用#、@等,只要和匹配内容里的字符不重复就行,这里选~是因为避免转义/\\d{4}:匹配4位数字(对应示例中的年份2018)\\d{2}:匹配2位数字(对应示例中的月份02)
如果需要提取匹配到的数字部分,可以给数字加上捕获组:
$pattern = '~/(\d{4})/(\d{2})/~'; if (preg_match($pattern, $target, $matches)) { echo "完整匹配内容:{$matches[0]}"; // 输出/2018/02/ echo "第一组数字:{$matches[1]}"; // 输出2018 echo "第二组数字:{$matches[2]}"; // 输出02 }
严格验证(确保数字合理)
如果需要确保第一个数字是合理年份(比如1900-2099),第二个数字是合法月份(01-12),可以用更精准的正则:
$pattern = '~/((19|20)\d{2})/(0[1-9]|1[0-2])/~'; if (preg_match($pattern, $target, $matches)) { echo "找到合法的日期格式:{$matches[0]}"; echo "年份:{$matches[1]}"; echo "月份:{$matches[3]}"; }
正则解释:
(19|20)\d{2}:匹配1900-2099之间的年份0[1-9]|1[0-2]:匹配01-09或10-12的合法月份
这样就能避免匹配到类似/9999/99/这种不符合逻辑的内容啦~
内容的提问来源于stack exchange,提问作者Deima
相关产品推荐
相关产品推荐

