i have the following two regular expressions
(in order btw).
1. ^~/buying/(.*)\?(.*) => foo= group 1 baa= group 2.
2. ^~/buying/(.*) => foo= group 1 baa= nothing/empty/null/baibai
What's i'm trying to do is, if the url has a questionmark, then split it into two groups. Otherwise, just throw all the stuff into the first group.
the reason why the order is important for me,开发者_StackOverflow is that if i switch them round, the '?' regex will never get fired because the #2 expression (above) will catch all.
So .. can this be re-fixed?
NOTE: I have tried using this website** to help me debug/tweak .. but I can't figure it out.
** I have no affiliation with that site.
try this:
^~/buying/([^?]*)\??(.*)
([^?]*)
- Captures the first group, which doesn't contain a question mark.
\??
- Optional question mark.
(.*)
- Optional second group - can be empty.
How about just making the second part optional (untested):
^~/buying/([^\?]*)(?:\?(.*))?
The ?:
is there to prevent the optional part (the part you need plus the question mark) from capturing.
Edit: Because of greediness, you need to use either the negated character class [^\?] or make it lazy. (The negated character class is preferred because it reduces backtracking.)
also you can join like this, easier to understand.
^~/buying/(.*)(\?(.*))?$
精彩评论