我正在寻找一个正则表达式模式,将返回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.