是否可以将这两个正则表达式连接成一个?

时间:2010-06-03 06:23:44

标签: regex simplify simplification

我有以下两个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 **来帮助我调试/调整..但我无法理解。

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

3 个答案:

答案 0 :(得分:5)

试试这个:

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

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

  

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