2
我正在寻找一些正则表达式的帮助。带括号的正则表达式
我有这样一段代码:
$router->add(
'/activate/{token:[a-zA-Z0-9]+}',
array (
'module' => 'frontend',
'controller' => 'user',
'action' => 'activate'
)
);
它工作得很好。但是下面的一个不:
$router->add(
'/activate/{token:[a-zA-Z0-9]{32}}',
array (
'module' => 'frontend',
'controller' => 'user',
'action' => 'activate'
)
);
的匹配机制,我在C是(与preg_match_all也适用)
'#{([a-zA-Z][a-zA-Z0-9\_\-]*)(:([^}]+))*}#'
我将不胜感激一些指引,以如何让第二个例子工作。
编辑
preg_match_all(
'#{([a-zA-Z][a-zA-Z0-9\_\-]*)(:([^}]+))*}#',
'/manual/{language:[a-z]{2}}/{file:[a-z]+}.html',
$matches,
PREG_SET_ORDER
);
我希望它这样返回的东西:
Array
(
[0] => Array
(
[0] => {language:[a-z]{2}}
[1] => language
[2] => :[a-z]{2}
[3] => [a-z]{2}
)
[1] => Array
(
[0] => {file:[a-z]+}
[1] => file
[2] => :[a-z]+
[3] => [a-z]+
)
)
我看不到'C' ... – alk
您在第二个示例中匹配的令牌是否只是[a-zA-Z0-9]的32个字符?什么路线不符合,是否因为另一条路线优先,因为它们是模糊的? – drew010
请添加一些示例,显示第一个作品和第二个作品没有的文字。 –