3

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

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

我想做的是,如果网址有问号,则将其分成两组。否则,把所有的东西都扔到第一组。

顺序对我来说很重要的原因是,如果我将它们调换,“?” 正则表达式永远不会被触发,因为 #2 表达式(上图)将捕获所有内容。

所以..这可以重新修复吗?

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

** 我与该网站没有任何关系。

4

3 回答 3

5

试试这个:

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

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

于 2010-06-03T06:26:30.473 回答
1

如何将第二部分设为可选(未经测试):

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

用于防止捕获可选部分(您需要的?:部分加上问号)。

编辑:由于贪婪,您需要使用否定字符类 [^\?] 或使其变得懒惰。(否定字符类是首选,因为它减少了回溯。)

于 2010-06-03T06:32:23.727 回答
0

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

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

于 2010-06-03T06:33:32.813 回答