繁体   English   中英

非捕获组:删除第3个值

[英]Non-Capturing Group: Remove 3rd value

我正在尝试为其他参数构建正则表达式。

我的网址可以包含以下内容:

  • Works: domain.tld / app / {$ID} - {$URL_FRIENDLY_NAME}
  • Works: domain.tld / app / {$ID} - {$URL_FRIENDLY_NAME} / {$ACTION}
  • 问题: domain.tld / app / {$ID} - {$URL_FRIENDLY_NAME} / {$ACTION} / {$TAB}

这是我的正则表达式:

“^ /应用/([0-9] +) - (A-ZA-Z0-9 - ] + |新)(:/(删除|配置(:/(资讯| FTP |日志))??? ))?$

{$ACTION}{$TAB}是可选参数。

例如, 该方案有效

  • 使用domain.tld /应用/ 1-测试名
    • 它打开了应用程序的主视图
  • 使用domain.tld /应用/ 1-测试名称/删除
    • 当您要删除应用程序时
  • 使用domain.tld /应用/ 1-测试名称/配置
    • App的配置页面

另外我想在我的config -Page上创建子页面:

  • 使用domain.tld /应用/ 1-测试名/配置/信息
    • 配置-信息
  • 使用domain.tld /应用/ 1-测试名/配置/日志
    • 应用程序的日志文件
  • 使用domain.tld /应用/ 1-测试名/配置/ 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`

在这里,你看到我的问题: Group 3具有Group 4 Group 3的价值。

我的具体问题是: 我如何删除/logs Group 3

你只需要重新排列你的分组,比如^/app/([0-9]+)-([a-zA-Z0-9-]+|new)(?:/(?:(delete|config)(?:/(info|ftp|logs))?))?$ 这使得您的组3成为非捕获组并且仅显式捕获delete|config

现场注释:在[a-zA-Z0-9-]+|new ,替代方案毫无意义,因为new已与重复的字符类匹配。

请试试这个正则表达式:

^\/app\/([0-9]+)-([a-zA-Z0-9-]+|new)(?:\/(delete|config)(?:\/(info|ftp|logs))?)?$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM