【发布时间】:2020-04-09 16:28:54
【问题描述】:
我正在尝试从 php 7.2 变量中匹配日期和时间。
带有日期时间的数据直接来自数据库查询。为了显示目的,在数据上进行了一些搜索和替换,但我尝试在搜索和替换之前和之后匹配数据。
$textdescription = $row['TEXT_DESCRIPTION'];
$search = array('#$#', '<(>', '<)>', '[');
$replace = array("\r\n", " ", " ", "\r\n\r\n[");
$ticketnotes = str_replace($search, $replace , $textdescription);
echo nl2br(htmlentities($ticketnotes, ENT_QUOTES));
这很好地显示了描述。但现在我正试图从这些数据中提取日期和时间。
$textdescription 作为一个简短的例子是:
03/13/2020 18:04:50 WJG
[Question] - Still Having Issues
[Environment] - NA
[Answer] - I explained
[Next Steps] - ANSWERED
03/07/2020 15:18:58 JAG
[Question] Startup Questions
[Environment] series
[Answer] Customer sees
[Next Steps] Completed
我寻找上述两个日期时间匹配的 php 代码是:
$re = "/(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})/";
preg_match_all($re, $textdescription, $matches);
print_r($matches);
$matches 什么也不返回。如果我复制上面的 $textdescription 变量,并手动将其放入代码中的变量中,则一切都按预期匹配。只有从数据库中检索它时,我才得到匹配。我也试过 $ticketnotes 而不是 $textdescription 没有成功。
我希望它是我忽略的一些简单的东西。感谢您的帮助!
【问题讨论】:
-
您确定吗,您的日期和时间总是有两位数,即使第一位是零?可能值得检查
-
在你运行 preg_match_all 之前,也许只是检查上面的一些代码没有损坏它,print_r 等。顺便说一句对我有用3v4l.org/bQlIh
-
正则表达式适用于提供的示例。 3v4l.org/c0A6K 您可以将正则表达式简化为
~\d\d/\d\d/\d{4} \d\d:\d\d:\d\d~除非您需要匹配每个值。\d\d比\d{2}短 -
有一个空格,一个还是多个?它是 Unicode 空间吗?试试
$re = "/(\d{2})\/(\d{2})\/(\d{4})\s+(\d{2}):(\d{2}):(\d{2})/u"; -
日期是否始终位于该文本的开头且格式相同?如果是这样,一个固定长度的简单子字符串可以为您获取它。