如何使用正则表达式

时间:2018-02-07 16:23:02

标签: php regex

我在问之前搜索,但我所测试的内容并不起作用。我有以下字符串:

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);
}

2 个答案:

答案 0 :(得分:2)

/([\d-: ]+)\s.*\sformatlog:gshop_trade:userid=(\d+):(.*)item_id=(\d+):expire=(\d+):item_count=(\d+):cash_need=(\d+):cash_left=(\d+).*$/

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

请参阅demo

答案 1 :(得分:0)

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

<强> [0-9] {4} - [0-9] {2} - [0-9] {2}