我尝试制作可以在某些字符串中检测日期的系统,这里是代码:
$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');
}
我发现的结果是“不匹配”,我不认为我使用了正确的正则表达式。有人可以告诉我要修复此代码必须做些什么
答案 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将为真。