我在问之前搜索,但我所测试的内容并不起作用。我有以下字符串:
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 :(得分: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} 强>