Est-il possible de joindre ces deux expressions regex en un seul?
-
23-10-2019 - |
Question
i ont les deux regular expressions
(dans l'ordre d'ailleurs) suivante.
1. ^~/buying/(.*)\?(.*) => foo= group 1 baa= group 2.
2. ^~/buying/(.*) => foo= group 1 baa= nothing/empty/null/baibai
Qu'est-ce que je suis est en train de faire est, si l'URL a une questionmark, puis le diviser en deux groupes. Dans le cas contraire, il suffit de jeter tous les trucs dans le premier groupe.
la raison pour laquelle l'ordre est important pour moi, est que si je les changer tour, le « ? » regex ne sera jamais me faire virer parce que l'expression # 2 (ci-dessus) va attraper tous.
.. peut-il être re-fixe?
NOTE: J'ai essayé utilisant ce site ** pour me aider debug / tweak .. mais je ne peut pas comprendre.
** Je n'ai aucune affiliation avec ce site.
La solution
essayez ceci:
^~/buying/([^?]*)\??(.*)
([^?]*)
-. Capture le premier groupe, qui ne contient pas un point d'interrogation
\??
-. marque Question facultative
(.*)
- deuxième groupe en option -. peut être vide
Autres conseils
Que diriez-vous juste faire la deuxième partie en option (non testé):
^~/buying/([^\?]*)(?:\?(.*))?
Le ?:
est là pour empêcher la partie optionnelle (la partie dont vous avez besoin, plus le point d'interrogation) de capture.
Edit: En raison de greediness, vous devez utiliser la classe de caractères niée [? ^ \] Ou le rendre paresseux. (La classe de caractères niée est préféré car il réduit retours en arrière.)
vous pouvez également rejoindre comme ça, plus facile à comprendre.
^~/buying/(.*)(\?(.*))?$