php - 带括号的正则表达式

标签 php c regex preg-match phalcon

我正在寻找有关正则表达式的帮助。

我有这段代码:

$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/

相关文章:

regex - Emacs 删除字符串中的最后一个目录

regex - TCL字符串匹配与正则表达式

php - 使用本地主机从 MYSQL 更改为 MYSQLI 无法正常工作

php - 类(class)调度算法显示与标准的最佳匹配?

php - Bootstrap dataTable 未在 php 表中排序和搜索

php - 如何验证laravel 5中上传的多个文件的mime?

C pthreads 传递局部变量

c - -lm 不在 makefile 中链接数学库

c++ - WinPCap 设置给出 "unresolved external symbol"链接器错误

php - preg_replace - 如何匹配任何不是\*\*的东西