在URL中的正斜杠之间获取变量

时间:2019-06-23 14:27:31

标签: php arrays preg-replace

假设我有一个网址: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 个答案:

答案 0 :(得分:2)

一种选择是对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 :(得分:1)

您可以使用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

答案 2 :(得分:1)

我们可以尝试在路径分隔符上进行拆分,然后将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
)

请注意,这种方法完全避免使用正式的正则表达式,如果您需要经常在脚本中执行此操作,则可能会对性能产生影响。