Regex, чтобы получить значение числового параметра URL? - PullRequest
3 голосов
/ 31 мая 2010

В URL-адресе, подобном приведенному ниже, я хотел бы получить значение ProdId. Формат URL всегда будет согласованным, как и имя параметра, но длина значения может измениться. Он всегда будет числовым.

http://www.example.com/page.php?ProdId=2683322&xpage=2

С помощью PHP какой самый быстрый способ получить его (я буду обрабатывать 10 000, так что скорость это проблема)?

Ответы [ 5 ]

13 голосов
/ 31 мая 2010

PHP имеет встроенные функции для этого. Используйте parse_url() и parse_str() вместе.

Собрано с php.net:

$url = 'http://www.example.com/page.php?ProdId=2683322&xpage=2';

// Parse the url into an array
$url_parts = parse_url($url);

// Parse the query portion of the url into an assoc. array
parse_str($url_parts['query'], $path_parts);

echo $path_parts['ProdId']; // 2683322
echo $path_parts['xpage']; // 2
6 голосов
/ 31 мая 2010

Попробуйте это регулярное выражение:

^http://www\.example\.com/page\.php\?ProdId=(\d+)
2 голосов
/ 31 мая 2010

Попробуйте эту функцию:

/https?:\/{2}(?:w{3}\.)?[-.\w][^\.]+\.{2,}\/ProdId=\d+\&xpage=\d+/
2 голосов
/ 31 мая 2010

Не можете ли вы использовать $_GET['ProdId']?

0 голосов
/ 31 мая 2010
/^[^#?]*\?(?:[^#]*&)?ProdId=(\d+)(?:[#&]|$)/

И то же на английском:

  1. Совпадение с чем угодно, кроме ? или # (это приведет нас к началу строки запроса или части хэша, в зависимости от того, что наступит раньше)
  2. Соответствует ? (если была только часть хеша, это дисквалифицирует совпадение)
  3. При желании можно сопоставить что угодно (но не #, если есть часть хеша), за которой следует &
  4. Соответствует вашей паре ключ-значение, помещая значение в подпаттерн захвата
  5. Соответствует либо следующему параметру &, # или концу строки.
...