Php 非捕获组:删除第三个值
我试图为其他参数构造一个正则表达式 我的URL可以具有以下值:Php 非捕获组:删除第三个值,php,regex,Php,Regex,我试图为其他参数构造一个正则表达式 我的URL可以具有以下值: 有效:domain.tld/app/{$ID}-{$URL\u-FRIENDLY\u-NAME} 有效:domain.tld/app/{$ID}-{$URL\u-FRIENDLY\u-NAME}/{$ACTION} 问题:domain.tld/app/{$ID}-{$URL\u-FRIENDLY\u-NAME}/{$ACTION}/{$TAB} 这是我的正则表达式: “^/app/([0-9]+)-([a-zA-Z0-9-]+|
- 有效:domain.tld/app/
-{$ID}
{$URL\u-FRIENDLY\u-NAME}
- 有效:domain.tld/app/
-{$ID}
/{$URL\u-FRIENDLY\u-NAME}
{$ACTION}
- 问题:domain.tld/app/
-{$ID}
/{$URL\u-FRIENDLY\u-NAME}
/{$ACTION}
{$TAB}
{$ACTION}
和{$TAB}
是可选参数
对于示例,此方案有效:
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`
- domain.tld/app/1-testname
- 它将打开应用程序的主视图
- domain.tld/app/1-testname/delete
- 当您要删除应用程序时
- domain.tld/app/1-testname/config
- 应用程序的配置页面
config
-页面上创建子页面:
- domain.tld/app/1-testname/config/info
- 配置信息
- domain.tld/app/1-testname/config/logs
- 应用程序的日志文件
- domain.tld/app/1-testname/config/ftp
- FTP配置
(?:/(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`
在这里,您可以看到我的问题:group3
的值为group4
我的具体问题是:我如何删除
第三组的/logs
?
你只需要重新安排你的分组,比如^/app/([0-9]+)-([a-zA-Z0-9-]+|新建)(?:/(?:(删除配置)(?:/(信息| ftp |日志)))?$/code>。这将使您的组3成为非捕获组,并仅显式捕获delete | config
站点说明:在[a-zA-Z0-9-]+|new
中,替代方案是毫无意义的,因为new
已经与重复字符类匹配。您只需重新安排分组,就像^/app/([0-9]+)-([a-zA-Z0-9-]+| new)(?:/(?:(?:(?:(删除|配置)(?:/(信息| ftp |日志))?)-)
。这将使您的组3成为非捕获组,并仅显式捕获delete | config
站点说明:在[a-zA-Z0-9-]+|new
中,替代方案是没有意义的,因为new
已与重复字符类匹配。请尝试此regexp:
^\/app\/([0-9]+)-([a-zA-Z0-9-]+|new)(?:\/(delete|config)(?:\/(info|ftp|logs))?)?$
请尝试此regexp:
^\/app\/([0-9]+)-([a-zA-Z0-9-]+|new)(?:\/(delete|config)(?:\/(info|ftp|logs))?)?$
谢谢,重新安排工作的:)是的,新的
-关键字放错了地方;new
必须添加到{$ID}
-昨天添加了URL友好名称,但忘记将new
移动到我的ID。谢谢,重新排列工作的:)是的,new
-关键字放错了位置;new
必须添加到{$ID}
-昨天添加了URL友好名称,但忘记将new
移动到我的ID。