Получение переменных между слешами в URL - PullRequest
2 голосов
/ 23 июня 2019

Допустим, у меня есть URL: https://somesite.com/0/posts/20/290/755653-Title.html Как бы получить эти переменные: /0/, /20/, /290/?Обратите внимание, что они переменные, они всегда будут разными.

Я думал, что смогу получить их так:

$url = '//somesite.com/0/posts/20/290/755653-Title.html'; var_dump(parse_url($url));

, но массив не показывает их какотдельные переменные.Должно ли это быть сделано с preg_replace вместо этого?Я не думаю, что знаю как.Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 23 июня 2019

Один из вариантов - использовать положительный прогноз с preg_match_all , где вы фиксируете шаблон в группе захвата:

(?=(/\d+/))

Это будет соответствовать

  • (?= Позитивный взгляд, утверждают, что прямо справа есть
    • (/\d+/) Соответствие /, 1+ цифр и /
  • )Закрыть положительный прогноз

Regex demo | Php demo

Например

$re = '~(?=(/\d+/))~m';
$str = 'https://somesite.com/0/posts/20/290/755653-Title.html';

preg_match_all($re, $str, $matches);
print_r($matches[1]);

Результат

Array
(
    [0] => /0/
    [1] => /20/
    [2] => /290/
)

Если вы хотите получить цифры только без окружающих слешей, вы можете добавитьгруппа только из цифр

(?=/(\d+)/) 

Php demo

1 голос
/ 23 июня 2019

Мы можем попробовать разбить на разделитель пути, а затем использовать array_filter со встроенной функцией, чтобы сохранить только чисто числовые компоненты:

$str = 'https://somesite.com/0/posts/20/290/755653-Title.html';
$parts = explode("/", $str);
$parts = array_filter($parts, function($item) { return is_numeric($item); });
print_r($parts);

Это печатает:

Array
(
    [3] => 0
    [5] => 20
    [6] => 290
)

Примечаниечто этот подход полностью исключает использование формальных регулярных выражений, которые могут повлиять на производительность, если вам часто приходится делать это в вашем скрипте.

1 голос
/ 23 июня 2019

Вы можете использовать explode () и превратить строку в массив, разделенный разделителем "/".

<?php
// Example 1
$url  = "https://somesite.com/0/posts/20/290/755653-Title.html";
$pieces = explode("/", $url);
echo $pieces[0] . "<br />";
echo $pieces[1] . "<br />";
echo $pieces[2] . "<br />";
echo $pieces[3] . "<br />";
echo $pieces[4] . "<br />";
echo $pieces[5] . "<br />";
echo $pieces[5] . "<br />";
echo $pieces[6] . "<br />";
echo $pieces[7] . "<br />";

echo "<hr />";
// Example 2
$data = "https://somesite.com/0/posts/20/290/755653-Title.html";
list($first, $second, $third, $fourth, $fifth, $sixth, $seventh, $eighth) = explode("/", $url);
echo $first . "<br />";
echo $second . "<br />";
echo $third . "<br />";
echo $fourth . "<br />";
echo $fifth . "<br />";
echo $sixth . "<br />";
echo $seventh . "<br />";
echo $eighth . "<br />";

?>

Выход:

https:

somesite.com
0
posts
20
20
290
755653-Title.html

https:

somesite.com
0
posts
20
290
755653-Title.html
...