PHP preg_match正则表达式,用于查找字符串中的日期

时间:2016-04-13 08:46:58

标签: php regex preg-match

我尝试制作可以在某些字符串中检测日期的系统,这里是代码:

$string = "02/04/16   10:08:42";
$pattern = "/\<(0?[1-9]|[12][0-9]|3[01])\/\.- \/\.- \d{2}\>/";
$found = preg_match($pattern, $string);
            if ($found) {
                echo ('The pattern matches the string');
            } else {
                echo ('No match');
            }

我发现的结果是“不匹配”,我不认为我使用了正确的正则表达式。有人可以告诉我要修复此代码必须做些什么

2 个答案:

答案 0 :(得分:0)

首先,从模式中删除所有乱码。这是您需要处理的部分:

(/0?[1-9]|[12][0-9]|3[01]/)

(正如你所说,你只需要日期,而不是日期时间。)

模式的主要问题是,您在分隔符处使用逻辑 OR 运算符(|)。如果分隔符是斜杠,则需要使用转义斜杠(/)替换管字符。请注意,您需要转义它们,因为解析器不会将它们作为控制字符。像这样:\/

现在,你需要在这里解决一些逻辑任务,正确匹配数字,你就可以了。 (我不会为你解决作业:)

这些文章将帮助您解决难题:

祝你好运!

答案 1 :(得分:0)

在你的评论中,你说你正在寻找yyyy,但是例子说yy 我为你做了一个代码,因为这就是你给我们的东西,你可以轻松地将2改为4,为yyyy。

preg_match("/((0|1|2|3)[0-9])\/\d{2}\/\d{2}/", $string, $output_array);
Echo $output_array[1]; // date

编辑:

如果使用这种模式,它也会与时间相匹配,从而使得更难以匹配错误 ((0 | 1 | 2 | 3)[0-9])/ \ d {2} / \ d {2} \ S + \ d {2}:\ d {2}:\ d {2}

http://www.phpliveregex.com/p/fjP

EDIT2:

此外,您可以跳过一行代码 你首先preg_match到$ found,然后做一个if $ found 这也有效:

If(preg_match($pattern, $string, $found))}{
    Echo $found[1];
}Else{
    Echo "nothing found";
}

上面提到的图案和字符串。
正如您所看到的那样,找到的变量在preg_match中作为输出,因此如果匹配则if将为真。