Как я могу извлечь строку запроса из этих журналов?

1

У меня есть строка строк в файле журнала, где мне нужно извлечь только часть строки запроса. Я определил этот шаблон:

/path/optin.html?e=somebase64string&l=somedifferentbase64string HTTP...
"/path/optin.html?e=somebase64string%3D&l=somedifferentbase64string" "browser info"...
"/path/optin.html?" "browser info"...

Некоторые примечания:

  • Иногда строка пути и запроса заключена в двойные кавычки
  • Иногда нет строки запроса, очевидно, что те, у которых нет строки запроса, должны быть отброшены.
  • Иногда строка base64 была закодирована в url, поэтому конечная часть "=" вместо этого "% 3D". Я не думаю, что это повлияло на мой сценарий, но я подумал, что я тоже это заметю.

Итак, я смог правильно извлечь - надеюсь, все строки, которые следуют за первым рисунком выше, но другие, с которыми у меня возникают проблемы.

Это образец, с которым я пытаюсь:

$pattern = '/html\?(.*)\s*HTTP/';

то я запускаю preg_match против строки журнала.

Кто-нибудь может помочь мне с лучшим шаблоном регулярных выражений?

Мне нужно снять эту часть с строк журнала:

е = somebase64string & л = somedifferentbase64string

благодаря

  • 0
    каков ваш ожидаемый результат? пожалуйста, добавьте это тоже в свой вопрос
  • 0
    Вы проверяли parse_url() ? Взорвись с пробелом и разбери первый элемент.
Показать ещё 2 комментария
Теги:

1 ответ

2
Лучший ответ

Вы можете использовать шаблон, например ~\?([^\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] => 
)

пример

  • 0
    это может сработать, я сейчас проверяю, спасибо
  • 1
    Я немного изменил шаблон в соответствии со своими потребностями: ~ optin.html \? ([^ \ S.] *) ~, Но это был правильный ответ, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню