gpt4 book ai didi

php - 在评论中查找不同样式的日期

转载 作者:可可西里 更新时间:2023-11-01 08:35:39 24 4
gpt4 key购买 nike

我还有一个关于 preg_match 的问题.

我有一张表,其中评论的日期写在评论本身内(手工),现在我需要提取该日期并将其放在不同的列中。

我发现,评论和日期的样式如下:

+-------+----------------------+--------------+
| id | warning_sent | warning_date |
+-------+----------------------+--------------+
| 6109 | 2011-06-28 | 0000-00-00 |
| 6123 | 2012 02 14 | 0000-00-00 |
| 6126 | Some text 18.11.10\n | 0000-00-00 | /* This is 2010-11-18 */
| 13750 | 2011-06-28\n | 0000-00-00 |
| 8108 | 7-01-2010 | 0000-00-00 |
| 9954 | 2012.07.03 | 0000-00-00 |
| 6110 | Some text 21-02-2011 | 0000-00-00 |
+-------+----------------------+--------------+

现在,我唯一能想到(并且知道该怎么做)就是寻找第一个数字,然后寻找最后一个。并以某种方式分析中间的字符串,但如果评论文本本身包含一个数字,这就会成为一个严重的问题。

所以问题是:我怎样才能找到评论中的所有日期(每个评论中只有一个日期)并以我想要的 YYYY-MM-DD 格式将它们自动存储在另一列中?

编辑: 这有效,thanx @infinity

$query = "SELECT id, warning_sent FROM data";
$result = qq( $query );

foreach( $result as $values )
{
preg_match( '/[\d]{4}((-|\s|\.)[\d]{2}){2}|([\d]{1,2}(\.|-)){2}[\d]{2,4}/', $values['warning_sent'], $matches );

$old_date = $matches[0];
$new_date = '0000-00-00';

/* 2011-06-28, 2012 02 14, 18.11.10, 7-01-2010, 2012.07.03, 21-02-2011, 20.10.2010 */
$formattings = array( 'Y-m-d', 'Y m d', 'd.m.Y', 'd.m.y', 'j-m-Y', 'Y.m.d', 'd-m-Y' );

for( $k=0; $k<sizeof( $formattings ); $k++ )
{
$sub_date = DateTime::createFromFormat( $formattings[$k], $old_date );
$sub_date = (array)$sub_date;
$timestamp = strtotime( $sub_date['date'] );
$check_date = date( $formattings[$k], $timestamp );
if( $old_date == $check_date ) $new_date = date( 'Y-m-d', $timestamp );
}

$warning_sent_date[$values['id']] = $new_date;

}

最佳答案

如果您只有这 3 种格式应该可以工作

'/[\d]{4}((-|\s|\.)[\d]{2}){2}|([\d]{1,2}(\.|-)){2}[\d]{2,4}/'

更新正则表达式

http://regexr.com?32pbf

关于php - 在评论中查找不同样式的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com