[英]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.