У меня есть строка строк в файле журнала, где мне нужно извлечь только часть строки запроса. Я определил этот шаблон:
/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 против строки журнала.
Кто-нибудь может помочь мне с лучшим шаблоном регулярных выражений?
Мне нужно снять эту часть с строк журнала:
е = somebase64string & л = somedifferentbase64string
благодаря
Вы можете использовать шаблон, например ~\?([^\s.]*)~
Чтобы соответствовать всем после ?
пока вы не достигнете символа пробела (при условии, что "у URL-адресов никогда не будет пробелов в них [это не %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] =>
)
parse_url()
? Взорвись с пробелом и разбери первый элемент.