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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:47:51