在PHP中分割URL

3
我在我的代码中有以下URL,我想将其拆分并从中获取数字。
例如,从下面的URL中需要获取123456。

https://review-test.com/#/c/123456/

我已经尝试过这个,但它没有起作用。

$completeURL  = https://review-test.com/#/c/123456/  ; 

  list($url, $number) = explode('#c', preg_replace('/^.*\/+/', '', $completeURL));
7个回答

3

使用 parse_url 函数。

它是专门用于这种情况的。


2
您可以不使用正则表达式来完成此操作 -
$completeURL  = 'https://review-test.com/#/c/123456/'  ; 

list($url, $number) = explode('#c', str_replace('/', '', $completeURL));

echo $number;

1

如果您想获取/c/123456/ 参数,您需要执行以下操作:

$url = 'https://review-test.com/#/c/123456/';
$url_fragment = parse_url($url, PHP_URL_FRAGMENT);
$fragments = explode('/', $url_fragment);
$fragments = array_filter(array_map('trim', $fragments));
$fragments = array_values($fragments);
  1. PHP_URL_FRAGMENT将返回#后面的url组件
  2. 经过parse_url后,您将得到像这样的字符串:'/c/123456/'
  3. explode('/', $url_fragment);函数将返回一个带有空索引的数组,其中'/'被提取
  4. 为了删除空索引,array_filter($fragments);,使用trim选项的array_map将删除多余的空格。在这种情况下不适用,但在实际情况下最好修剪。
  5. 现在,如果您var_dump结果,您会发现数组需要重新索引array_values($fragments)

0

0
随后,您可以直接使用纯正则表达式从字符串中提取数字。
preg_match('!\d+!', "https://review-test.com/#/c/123456/", $matches);
print_r($matches);

正在工作中 演示


0

简单来说:

$tmp = explode( '/', $completeUrl).end();

它将通过 '/' 分割字符串,并取最后一个元素


0

如果您除了正则表达式没有其他选择,针对您的示例数据,您可以使用preg_match来拆分您的URL,而不是使用preg_replace

一种方法可能是:

  • 捕获第一部分作为组(.+\/)
  • 然后将您的数字作为组捕获(\d+)
  • 以行末的斜杠结尾\/$/

这将获取URL中的最后一个数字,后跟一个斜杠。

然后,您可以使用list并跳过$matches数组的第一项,因为它包含与完整模式匹配的文本。

$completeURL  = "https://review-test.com/#/c/123456/";
preg_match('/(.+\/)(\d+)\/$/', $completeURL, $matches);
list(, $url, $number) = $matches;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接