[英]Non-Capturing Group: Remove 3rd value
我正在尝试为其他参数构建正则表达式。
我的网址可以包含以下内容:
{$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
-Page上创建子页面:
我的问题是最后一个非捕获组(?:/(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.