繁体   English   中英

PHP正则表达式模式是否从“友好” URL返回N个子段/块(以“ /”字符分隔或拆分)作为匹配项?

[英]PHP regex pattern to return N slugs/chunks (separated or split on the “/” char.) as matches from a “friendly” URL?

我正在寻找一个正则表达式模式,该模式将返回N个子段/块(URL的所有部分,在“ /”字符上分隔或拆分)作为“友好” URL的匹配项。

该模式不应包含域或斜杠。 同样,该模式应与未知数量的条和/或斜线一起工作。

例如,一些示例URL和所需的返回子段/块:

  • “” = array()
  • “ foo / bar /” = array('foo','bar')
  • “ foo / bar / baz” = array('foo','bar','baz')
  • “ foo-bar / baz” = array('foo-bar','baz')

最后,我需要传递此正则表达式模式preg_match(或类似格式),并使其通过函数的$ matches参数返回结果。

例如:

<?php preg_match($your_pattern, $friendly_url, $your_pattern_matches); ?>

...可以使用explode()获得相似的结果。

与我的旧示例相比,这种模式在更为复杂的场景中使用。 要求使用/强制我通过preg_match使用正则表达式模式作为解决方案。 基本上,我正在传递preg_match一个选择模式,这就是为什么我需要一个正则表达式模式而不是简单使用explode的原因。

非常感谢您的帮助!

干杯!

首先,检查preg_split的手册

$segments = preg_split('[/]', $uri, 0, PREG_SPLIT_NO_EMPTY);

如果您坚持使用preg_match,请查看以下内容:

$uri = '/foo-bar/baz';

preg_match_all('%[^/]+%', $uri, $matches);

print_r($matches);

听起来像explode()可以完成工作,而不必理会正则表达式:

$matches = explode('/', $url);

抱歉,但我认为您无法使用preg_match做您想做的事情。

阅读文档后

您可以看到preg_match将在第一个比赛时停止。 您希望在一个友好的url中包含一个匹配项数组,但这只能通过多个matchs来实现,以便将值存储在数组中通过单个匹配项来存储整个内容。 这两种情况都不适合您,因此我担心您将不得不使用除preg_match之外的其他方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM