PHP正则表达式模式返回N个段/块(按"/"分隔或分割)(字符)作为“友谊赛”中的火柴.URL


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/巴兹"=数组("foo"、"酒吧","巴兹")
  • "foo bar/巴兹"=数组(foo bar, baz)

最后,我需要传递这个regex模式preg_match(或类似的),并通过函数的$matches参数返回结果。

例如:

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

…使用explosion()也可以得到类似的结果。

这个模式在一个比我的小旧例子更复杂的场景中使用;要求使用/强迫我使用regex模式通过preg_match的解决方案。基本上,我给preg_match传递了一个选择的模式,这就是为什么我需要一个regex模式,而不是简单地使用explosion。

非常感谢你的帮助!

干杯!

首先,查看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中有一个匹配数组,但是这只能通过多个匹配来实现,以便通过单个匹配将值存储在数组中,这将捕获整个内容。这两种情况都不适合您,所以恐怕您必须使用preg_match.

以外的其他方法。