Jump to content

preg_match_all


widowmaker

Recommended Posts

hiya, I'm having this problem. I've got a log file which looks similar to this:

 

2010/06/28 22:54:59 administrator	13	-1
2010/06/06 22:54:59 administrator	1	2
2010/06/06 22:55:04 user	1	1

 

I want to go thru the whole logfile and split each row into variables using this pattern:

 

$reg[0]=2010

$reg[1]=06

$reg[2]=28

$reg[3]=22

$reg[4]=54

$reg[5]=59

$reg[6]=administrator

$reg[7]=13

$reg[8]=-1

 

I'm using this code but it doesn't work for some reason:

 

$row = '2010/06/28 22:54:59 administrator	13	-1';
preg_match_all('/^(\d{4})\/(\d{2})\/(\d{2})\s(\d{2})\d{2})\d{2})\s(\w+?)\t(\d+?)\t(\d+)$/i', $row, $regs);
var_dump($regs);

 

thanx for any help

Link to comment
https://forums.phpfreaks.com/topic/208420-preg_match_all/
Share on other sites

This would be much easier without regular expressions, there are tools in PHP dedicated to parsing this kind of (tab-separated value) file, or more useful (and simple) string-parsing functions to do the job manually.

 

Do you ultimately want the array to be like that you posted (in the first post) or would you like the date and time values kept together?

Link to comment
https://forums.phpfreaks.com/topic/208420-preg_match_all/#findComment-1089467
Share on other sites

One way would be to use sscanf like:

 

$row = '2010/06/28 22:54:59 administrator    13    -1';
$reg = sscanf($row, '%d/%d/%d %d:%d:%d %s %d %d');

 

And another would be to use fgetcsv and specify tab as the delimiter character. (The function is named CSV for comma-separated values, but is equally happy with tab-separated values like your file).

Link to comment
https://forums.phpfreaks.com/topic/208420-preg_match_all/#findComment-1089534
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.