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
請添加一些示例,顯示第一個作品和第二個作品沒有的文字。 –