每个人我这里有一个正则表达式的问题,我想解析这个日志文件,现在我想得到SESSION内部的键和值
问题是,日志看起来并不都一样,其中一些日志缺少#字符包含' SESSION ',但是它们都包含单词SESSION来开始变量块,并且它们都以另一个总是包含单词"POST“或"API CURL CALL”的块结束。
所以我必须使用量词,使它最有可能忽略这些字符串之间的任何东西,但当匹配这两个其他值中的任何键和值集(由:分隔)时…
光是说起这件事就有点扯了.我完全被难住了,所以我在这件事上向你们寻求一些指导和帮助。我们的目标是将这些糟糕的日志解析成我可以快速阅读和理解的东西。
我正在用PHP创建一个类来实现这一点,并输出一些很好的HTML格式的日志。这是原样的日志文件。
[05:40:40] ################
[05:40:40] #### SOURCE ####: /zalo/vn/interface.call.php
[05:40:40] #### REQUEST ####: /zalo/vn/interface.call.php
[05:40:40] #### Refer: http://app.com/zalo/vn/?v=1&adsid=d6e5f33e5a94d9fafaf15dc0cf4a1e5&sub_id=170100sf01435487523&sub_id1=232s5
[05:40:40] #### SESSION #####
[05:40:40] v: 1
[05:40:40] adsid: d6e5f33e5a94d93sfsf5dc0cf4a1e5
[05:40:40] sub_id: 799e12b08fa1edes1d7bgsg0506a6e9
[05:40:40] landingpage: http%3A%2F%2Fapp.com%2Fzalo%2Fvn%2Finterface.call.php
[05:40:40] c_id: da21bae82c02d1e2b8168d57cd3fbab7
[05:40:40] nId: 3943
[05:40:40] partner: Marvel
[05:40:40] country_code: 84
[05:40:40] country: VN
[05:40:40] url: http://app.com/zalo/vn/
[05:40:40] campaign_id: 1066
[05:40:40] source: web
[05:40:40] msisdn: 906346534
[05:40:40] Phone: 906346534
[05:40:40] #### POST ####
[05:40:40] action: subscribe
[05:40:40] Phone: 906346534
[05:40:40] ################
[05:40:40] #### API CURL CALL ####理想情况下,我想保留的是这一部分
v: 1
adsid: d6e5f33e5a94d93sfsf5dc0cf4a1e5
sub_id: 799e12b08fa1edes1d7bgsg0506a6e9
landingpage: http%3A%2F%2Fapp.com%2Fzalo%2Fvn%2Finterface.call.php
c_id: da21bae82c02d1e2b8168d57cd3fbab7
nId: 3943
partner: Marvel
country_code: 84
country: VN
url: http://app.com/zalo/vn/
campaign_id: 1066
source: web
msisdn: 906346534
Phone: 906346534 我可能需要某种后视-前视的组合。
(?=SESSION).*?(?<=POST)一些类似的东西,但也去掉了我不需要的时间戳、实际的会话和POST关键字。
发布于 2017-02-24 06:12:37
如果文件不是太大,你可以遍历整个文件:
$foo = file("test.txt");
$insession = false;
foreach ($foo as $line) {
if (!$insession) {
if (strpos($line, "SESSION") === false) continue;
$insession = true;
continue;
}
if (strpos($line, "POST") !== false) break;
if (preg_match("/^\[[\d:]+?\] (.*)$/", $line, $matches)) {
echo "$matches[1]\n";
}
}https://stackoverflow.com/questions/42425749
复制相似问题