我试图为其他参数构建正则表达式。
我的网址可以包含以下值:
{$ID}
- {$URL_FRIENDLY_NAME}
{$ID}
- {$URL_FRIENDLY_NAME}
/ {$ACTION}
{$ID}
- {$URL_FRIENDLY_NAME}
/ {$ACTION}
/ {$TAB}
这是我的正则表达式:
' ^ /应用/([0-9] +) - ([A-ZA-Z0-9 - ] + |新)(:?/(删除|配置(:/(信息| FTP |?日志))))$
{$ACTION}
和{$TAB}
是可选参数。
对于示例,此方案有效:
其他我想在我的config
- 页面
我的问题是最后一个非捕获组(?:/(info|ftp|logs))?
- 匹配的结果是正确的,但不是来自之前的非捕获组。
如果没有最后一个组,则结果如下:正确:
Full match `/app/1-testname/config`
Group 1. `1`
Group 2. `testname`
Group 3. `config
Full match `/app/1-testname/delete`
Group 1. `1`
Group 2. `testname`
Group 3. `delete`
以下是最后一个非捕获组的结果:
Full match `/app/1-testname/config/logs`
Group 1. `1`
Group 2. `testname`
Group 3. `config/logs`
Group 4. `logs`
在这里,您看到我的问题:Group 3
的值为Group 4
。
我的具体问题是:我如何删除/logs
上的Group 3
?
答案 0 :(得分:0)
您只需稍微重新排列分组,例如^/app/([0-9]+)-([a-zA-Z0-9-]+|new)(?:/(?:(delete|config)(?:/(info|ftp|logs))?))?$
。这使您的第3组无法捕获,并且只显式捕获delete|config
。
网站注意:在[a-zA-Z0-9-]+|new
中,替代方案毫无意义,因为new
已与重复的字符类匹配。
答案 1 :(得分:0)
请试试这个正则表达式:
^\/app\/([0-9]+)-([a-zA-Z0-9-]+|new)(?:\/(delete|config)(?:\/(info|ftp|logs))?)?$