【问题标题】:How can I extract only date from a string using regex如何使用正则表达式从字符串中仅提取日期
【发布时间】:2018-02-07 16:23:02
【问题描述】:

我在询问之前进行了搜索,但我测试过的内容不起作用。我有以下字符串:

2016-07-31 00:32:29 debian-8gb-sfo2-01 gamed: notice : 

我想知道如何从这个字符串中提取日期。完整的正则表达式(缺少日期正则表达式)返回以下内容:

Array
(
    [0] => 2016-07-31 00:32:29 debian-8gb-sfo2-01 gamed: notice : formatlog:gshop_trade:userid=1792:db_magic_number=1744:order_id=23727:item_id=47494:expire=0:item_count=1:cash_need=1:cash_left=99976272:guid1=0:guid2=0
    [1] => 2016-07-31 00:32:29 debian-8gb-sfo2-01 gamed: notice :
    [2] => 1792
    [3] => db_magic_number=1744:order_id=23727:
    [4] => 47494
    [5] => 0
    [6] => 1
    [7] => 1
    [8] => 99976272
)

没错,但愿望输出是:

Array 
(
        [1] => 2016-07-31 00:32:29
        [2] => 1792
        [3] => db_magic_number=1744:order_id=23727:
        [4] => 47494
        [5] => 0
        [6] => 1
        [7] => 1
        [8] => 99976272
)

当前代码:

if (strpos($line, 'gshop_trade:userid=1792:') > 0) {
    if (!preg_match('/(.*)\sformatlog:gshop_trade:userid=(\d+):(.*)item_id=(\d+):expire=(\d+):item_count=(\d+):cash_need=(\d+):cash_left=(\d+).*$/', $line, $d)) {
        // error occured
    }
   echo '<pre>';
   print_r($d);
}

【问题讨论】:

  • 您使用的正则表达式到底是什么?你提到它,但不显示它。
  • 请编辑您的问题,并添加用于提取日期的代码。根据您的数据判断,您将第 0 组添加到输出中。
  • @Seth 我添加了代码。
  • 您根本没有单独捕获日期时间:/\s*(\S+\s+\S+).*\sformatlog:gshop_trade:userid=(\d+):(.*)item_id=(\d+):expire=(\d+):item_count=(\d+):cash_need=(\d+):cash_left=(\d+).*$\K/

标签: php regex


【解决方案1】:
/([\d-: ]+)\s.*\sformatlog:gshop_trade:userid=(\d+):(.*)item_id=(\d+):expire=(\d+):item_count=(\d+):cash_need=(\d+):cash_left=(\d+).*$/

您在开始时不希望捕获的项目周围使用捕获组,([\d-: ]+) 组应该正确捕获日期

demo

【讨论】:

  • 是的!工作完美。谢谢。
【解决方案2】:

试试这个。如果您想与格式为 YYYY-MM-DD 的任何字符串中的日期完全匹配,请使用以下正则表达式

[0-9]{4}-[0-9]{2}-[0-9]{2}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多