Извлечение параметров URL с помощью регулярного выражения - повторение группы захвата - PullRequest
3 голосов
/ 14 октября 2011

Я пытаюсь извлечь параметры URL через регулярное выражение, и я так близок к тому, чтобы заставить его работать.Я даже знаю, в чем проблема: мое регулярное выражение спотыкается о повторных группах захвата.Но я просто не могу понять, как это исправить.

Язык - PHP.

Мой URL выглядит примерно так, как показано ниже.У него не может быть параметров, только один или несколько:

member.php?action=bla&arg=2&test=15&schedule=16

Мое регулярное выражение выглядит так:

member\.php((?:[\?|&](\w*)=(\w*))*)

И мои группы захвата заканчиваются тем, что:

1. action=bla&arg=2&test=15&schedule=16
2. schedule
3. 16

Я не могу понять, как собрать все параметры по отдельности.Должен ли я согласиться на первую группу захвата и взорвать ее сам?Для моих целей было бы намного элегантнее, если бы я мог выполнять всю работу в одном регулярном выражении.

Ответы [ 3 ]

9 голосов
/ 14 октября 2011
try:
<?php
$str="member.php?action=bla&arg=2&test=15&schedule=16#test";
preg_match_all('/([^?&=#]+)=([^&#]*)/',$str,$m);
print_r($m);

//combine the keys and values onto an assoc array
$data=array_combine( $m[1], $m[2]);
print_r($data);
?>
5 голосов
/ 14 октября 2011

Вы пробовали parse_url и parse_str?

0 голосов
/ 14 октября 2011

Извлечение параметров и их значений с помощью -> &[\w]*=[\d]*

...