preg_match()(或其他php正则表达式函数)可以匹配可变数量的带括号的子模式吗?

时间:2009-08-18 15:40:38

标签: php regex preg-match

假设我有'/srv/www/site.com/htdocs/system/application/views/'并希望针对匹配路径中每个目录名称的正则表达式对其进行测试?

这样的模式:'(/[^/])'
这会产生一个'srv','www','site.com'...等数组。

PS:我写的正则表达式语法只是为了说明,它没有经过测试,肯定是错误的,只是为了给出一个想法。

PS2:我知道有explode(),但让我们看看我们是否可以使用正则表达式来实现这一点(它对其他没有爆炸的语言和框架很有用)。

3 个答案:

答案 0 :(得分:4)

preg_match_all

$str = '/srv/www/site.com/htdocs/system/application/views/';

preg_match_all('/\/([^\/]+)/', $str, $matches);

// $matches[0] contains matching strings
// $matches[1] contains first subgroup matches
print_r($matches[1]);

输出:

Array
(
    [0] => srv
    [1] => www
    [2] => site.com
    [3] => htdocs
    [4] => system
    [5] => application
    [6] => views
)

答案 1 :(得分:1)

preg_split用于在正则表达式上拆分文件,类似于explode,然后有preg_match_all可以执行您想要的操作。

答案 2 :(得分:1)

我认为你不能,但你可以使用preg_match_all()从正则表达式中获取多个匹配项。还有preg_split()可能更合适。