разбирать параметры URL в Perl - PullRequest
2 голосов
/ 26 января 2020

Я работаю над некоторыми учебными пособиями, чтобы объяснить такие вещи, как GET / POST, и мне нужно проанализировать URI вручную. Следующий код perl работает, но я пытаюсь сделать две вещи:

  1. перечислить каждый ключ / значение
  2. быть в состоянии найти одно указанное c значение

Меня не волнует замена специальных символов на пробелы или что-то еще, единственное значение, которое мне нужно получить, должно быть числом. В других языках, которые я использовал, рассматриваемое регулярное выражение должно группировать каждый ключ / значение в одну группу с частью 1 / частью 2, Perl делает то же самое? Если да, то как мне поместить это в карту?

my @paramList = split /(?:\?|&|;)([^=]+)=([^&|;]+)/, $ENV{'REQUEST_URI'};
if(@paramList)
{
    print "<h1>The Params</h1><ul>";
    foreach my $i (@paramList) {
        if($i) {
        print "<li>$i</li>"; 
        }
    }
    print "<ul>";
}

Для запроса, вот базовый c пример ввода:

REQUEST_URI = /cgi-bin/printenv_html.pl?customer_name=fdas&phone_number=fdsa&email_address=fads%40fd.com&taxi=van&extras=tip&pickup_time=2020-01-14T20%3A45&pickup_place=&dropoff_place=Airport&comments=

цель - это следующее, где слева от равенства находится ключ, а справа - значение:

customer_name=fdas
phone_number=fdsa
email_address=fads%40fd.com
taxi=van
extras=tip
pickup_time=2020-01-14T20%3A45
pickup_place=
dropoff_place=Airport
comments=

1 Ответ

4 голосов
/ 26 января 2020

Как насчет подачи вашего списка пар ключ-значение в га sh?

my %paramList = $ENV{'REQUEST_URI'} =~ /(?:\?|&|;)([^=]+)=([^&|;]+)/g;

(без причины для split, насколько я могу судить)

Это основывается на том, что существует список совпадений четного размера, где каждая вещь "before- =" становится ключом в ha sh, а значением является ее пара "after- =".

Чтобы также получить "пары" без значения (например, comments=), измените + в последнем паттерне на *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...