Можно ли объединить эти два выражения регулярных выражений в одно? - PullRequest
3 голосов
/ 03 июня 2010

у меня есть следующие два regular expressions (в порядке, кстати).

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

Что я пытаюсь сделать, если в URL есть вопросительный знак, а затем разделить его на две группы. В противном случае, просто бросьте все вещи в первую группу.

причина, по которой порядок важен для меня, заключается в том, что если я переключу их, то "?" Регулярное выражение никогда не будет запущено, потому что выражение # 2 (выше) перехватит все.

Итак ... это можно исправить?

ПРИМЕЧАНИЕ: я пытался , используя этот сайт **, чтобы помочь мне отладить / настроить ... но я не могу понять.

** У меня нет связи с этим сайтом.

Ответы [ 3 ]

5 голосов
/ 03 июня 2010

попробуйте это:

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

([^?]*) - захват первой группы, в которой нет знака вопроса.
\?? - Необязательный знак вопроса.
(.*) - необязательная вторая группа - может быть пустой.

1 голос
/ 03 июня 2010

Как насчет того, чтобы сделать вторую часть необязательной (непроверенной):

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

?: предназначен для предотвращения захвата необязательной детали (нужной вам детали и знака вопроса).

Редактировать: Из-за жадности вам нужно использовать либо отрицательный класс символов [^ \?], Либо сделать его ленивым. (Класс отрицанных символов предпочтительнее, потому что он уменьшает обратный ход.)

0 голосов
/ 03 июня 2010

также вы можете присоединиться, как это, легче понять.

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

...