我有以下两个regular expressions
(顺序为btw)。
1. ^~/buying/(.*)\?(.*) => foo= group 1 baa= group 2.
2. ^~/buying/(.*) => foo= group 1 baa= nothing/empty/null/baibai
我想要做的是,如果网址有问号,则将其拆分为两组。否则,只需将所有内容扔进第一组。
订单对我来说很重要的原因是,如果我将它们转换为“?”正则表达式永远不会被解雇,因为#2表达式(上图)将捕获所有。
那么..可以重新修复吗?
注意:我已经尝试using this website **来帮助我调试/调整..但我无法理解。
**我与该网站没有任何关系。
答案 0 :(得分:5)
试试这个:
^~/buying/([^?]*)\??(.*)
([^?]*)
- 捕获第一组,其中不包含问号
\??
- 可选问号。
(.*)
- 可选的第二组 - 可以为空。
答案 1 :(得分:1)
如何让第二部分成为可选(未经测试):
^~/buying/([^\?]*)(?:\?(.*))?
?:
用于防止可选部分(您需要的部分加上问号)被捕获。
编辑:由于贪婪,你需要使用否定的字符类[^ \?]或使其变得懒惰。 (否定的字符类是首选,因为它减少了回溯。)
答案 2 :(得分:0)
你也可以像这样加入,更容易理解。
^~/buying/(.*)(\?(.*))?$