我正在寻找有关正则表达式的帮助。
我有这段代码:
$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]+
)
)
最佳答案
这个正则表达式:'#{([a-zA-Z0-9_-])(:(.)}?)}#'对它们都适用:
<?php
preg_match_all(
'#{([a-zA-Z0-9\_\-]*)(:([^}]+}?))*}#',
'/activate/{token:[a-zA-Z0-9]{32}}',
$matches,
PREG_SET_ORDER
);
print_r($matches);
preg_match_all(
'#{([a-zA-Z0-9\_\-]*)(:([^}]+}?))*}#',
'/activate/{token:[a-zA-Z0-9]+}',
$matches,
PREG_SET_ORDER
);
print_r($matches);
关于php - 带括号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276903/