贴一个perl5的,对perl5不熟悉,写的不好
if ($line =~ m/[IP|Agent|URL|POST|COOKIE|ErrorCode|Result|=+\[]+[\:]?(\d*-\d*-\d* \d*:\d*:\d*|.*)/) {
print $1."\n";
}
然后是一个perl6的
if $line ~~ /[
[\=]+\[(.*)\][\=]+ ||
[IP|Agent|URL|POST|COOKIE|ErrorCode|Result]\:(.*)
]/ {
say $/;
}
log 文件过大,不建议用正则表达式,你可以通过按行读取、分割字符串的方式进行处理:
PHP 代码:
$fp = fopen('xx.log', 'r');
while(!feof($fp)){
$line = trim(fgets($fp));
// 跳过空行
if(!$line){
continue;
}
// 以 ==== 字符串开头时
if(strpos($line, '====') === 0){
if($data){
//处理上一条记录
}
$data = array();
}
// 分割字符串
list($key, $value) = explode(':', $line, 2);
// 写入到数组
$data[$key] = trim($value);
}
fclose($fp);