Можно ли объединить эти два выражения регулярных выражений в одно?
У меня есть следующие два regular expressions
(в порядке, кстати).
1. ^~/buying/(.*)\?(.*) => foo= group 1 baa= group 2.
2. ^~/buying/(.*) => foo= group 1 baa= nothing/empty/null/baibai
То, что я пытаюсь сделать, если URL имеет вопросительный знак, а затем разделить его на две группы. В противном случае, просто бросьте все вещи в первую группу.
причина, по которой порядок важен для меня, заключается в том, что если я переключу их, "?" Регулярное выражение никогда не будет запущено, потому что выражение #2 (выше) перехватит все.
Итак... это можно исправить?
ПРИМЕЧАНИЕ: я пытался использовать этот сайт**, чтобы помочь мне отладить / настроить... но я не могу понять это.
** У меня нет связи с этим сайтом.
3 ответа
Попробуй это:
^~/buying/([^?]*)\??(.*)
([^?]*)
- Захватывает первую группу, в которой нет знака вопроса.\??
- Необязательный знак вопроса.(.*)
- Необязательная вторая группа - может быть пустой.
Как насчет того, чтобы сделать вторую часть необязательной (непроверенной):
^~/buying/([^\?]*)(?:\?(.*))?
?:
чтобы предотвратить захват необязательной части (нужной вам части плюс знак вопроса).
Изменить: Из-за жадности, вам нужно использовать либо отрицательный класс символов [^\?], Либо сделать его ленивым. (Отрицательный символьный класс предпочтителен, потому что он уменьшает возврат).
Также вы можете присоединиться, как это, легче понять.
^~/buying/(.*)(\?(.*))?$