我在日志文件中有一堆行,我只需要提取查询字符串部分。我已经确定了这些模式:
/path/optin.html?e=somebase64string&l=somedifferentbase64string HTTP...
"/path/optin.html?e=somebase64string%3D&l=somedifferentbase64string" "browser info"...
"/path/optin.html?" "browser info"...
一些注意事项:
所以,我能够正确地提取 - 希望 - 所有跟随上面第一个模式的行,但其他的我遇到了一些麻烦。
这是我正在尝试的模式:
$pattern = '/html\?(.*)\s*HTTP/';
然后我在日志行上运行 preg_match 。
任何人都可以用更好的正则表达式来帮助我吗?
我需要从日志行中抓取这部分:
E =&somebase64string放大器; L = somedifferentbase64string
由于
答案 0 :(得分:2)
您可以使用~\?([^\s.]*)~
之类的模式匹配?
之后的所有内容,直到您到达空白字符(假设规则为"网址中永远不会有空格[不是&# 39; t %20
]):
$pattern = '~\?([^\s.]*)~';
preg_match_all($pattern, $logs, $output);
然后修剪任何引号(例如在上一个示例中):
$output = array_map(function($var) { return rtrim($var, '"'); }, $output[1]);
给你:
Array
(
[0] => e=somebase64string&l=somedifferentbase64string
[1] => e=somebase64string%3D&l=somedifferentbase64string
[2] =>
)