我有以下两个 regular expressions (顺便说一句)。

1. ^~/buying/(.*)\?(.*)   => foo= group 1  baa= group 2.
2. ^~/buying/(.*)         => foo= group 1  baa= nothing/empty/null/baibai

我要做的是,如果URL有一个问题标记,则将其分为两组。否则,只需将所有内容扔进第一组即可。

该订单对我很重要的原因是,如果我将它们转动,“?” Regex永远不会被解雇,因为#2表达式(上)会抓住一切。

所以..可以重新固定吗?

注意:我尝试过 使用此网站**帮助我调试/调整..但是我无法弄清楚。

**我与该站点没有隶属关系。

有帮助吗?

解决方案

尝试这个:

^~/buying/([^?]*)\??(.*)

([^?]*) - 捕获不包含问号的第一组。
\?? - 可选问号。
(.*) - 可选的第二组 - 可以为空。

其他提示

如何仅使第二部分可选(未经测试):

^~/buying/([^\?]*)(?:\?(.*))?

?: 是否可以防止可选零件(您需要的零件加上问号)捕获。

编辑:由于贪婪,您需要使用否定的字符类[^?]或使其懒惰。 (由于降低了回溯性,因此首选被否定的字符类。)

您也可以这样加入,更容易理解。

^~/buying/(.*)(\?(.*))?$

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top