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.

Était-ce utile?

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/(.*)(\?(.*))?$

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top