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

PHP正则匹配字符串中日期失败问题求助

问题分析与解决

我一眼就找到问题所在啦——你的正则表达式犯了一个常见的语法错误:定界符未转义!

问题根源

你用了/作为正则表达式的定界符,但在模式内部的[- /.]里直接使用了/(日期的分隔斜杠),这会让PHP误以为正则表达式在这里就结束了,导致整个模式语法无效。preg_match遇到无效正则时会返回false,自然就触发了else分支,返回"No date found."。

修正方案

有两种简单的解决办法:

1. 转义模式中的/

把正则里的[- /.]修改为[- \/.],让PHP把斜杠当作普通字符处理:

function matchDate($str) {
    if (preg_match('/\b(0?[1-9]|1[012])[- \/.](0?[1-9]|[12][0-9]|3[01])[- \/.](19|20)?[0-9]{2}\b/', $str, $mDdate)) {
        return $mDdate[0];
    } else {
        return "No date found.";
    }
}

$str = "FISH HOUSE KINGS FISH HOUSE 100 W Broadway Long Beach, Ca. 90802 562-432-7463 Server: Ezbeth 07/02/2016 ...";
echo matchDate($str); // 输出:07/02/2016

2. 更换定界符

如果不想频繁转义,可以换一个不冲突的定界符,比如#或~,这样模式里的/就不需要转义了:

function matchDate($str) {
    if (preg_match('#\b(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}\b#', $str, $mDdate)) {
        return $mDdate[0];
    } else {
        return "No date found.";
    }
}

额外提示

你可以通过preg_last_error()函数查看正则匹配的错误信息,下次遇到类似问题时,用它来快速定位语法问题:

if (preg_match(...) === false) {
    echo preg_last_error_msg(); // 会输出:Unknown modifier '/'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:50:27