繁体   English   中英

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

[英]PHP preg_match regular expression for find date in string

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

$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');
            }

我发现的结果是“ No Match”,我认为我没有为模式使用正确的正则表达式。 有人可以告诉我如何解决此代码吗

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

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

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

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

现在,您需要在此处解决一些逻辑任务,以正确地匹配数字,然后您就可以开始工作了。 (我不会为您解决作业:)

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

祝好运!

在您的评论中,您说您正在寻找yyyy,但是示例中的内容为yy。
我为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

编辑2:

另外,您可以跳过一行代码。
您首先将preg_match匹配到$ found,然后执行if $ found。
这也适用:

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

带有上面提到的模式和字符串。
如您所见,找到的变量作为输出在preg_match中,因此,如果存在匹配项,则if为true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM