Ich habe eine URL und versuche, sie einem regulären Ausdruck zuzuordnen, um einige Gruppen herauszuholen. Das Problem, das ich habe, ist, dass die URL entweder mit einem "/" und mehr URL-Text enden oder fortfahren kann . Ich möchte URLs wie folgt abgleichen:
- http: // server / xyz / 2008-10-08-4
- http: // server / xyz / 2008-10-08-4 /
- http: // server / xyz / 2008-10-08-4 / 123 / more
Aber nicht so etwas zusammenbringen:
Also dachte ich, meine beste Wette wäre so etwas:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
wobei die Zeichenklasse am Ende entweder das "/" oder das Zeilenende enthielt. Die Charakterklasse scheint jedoch mit dem "$" dort nicht zufrieden zu sein. Wie kann ich am besten zwischen diesen URLs unterscheiden, während ich immer noch die richtigen Gruppen zurückziehe?
Sie haben jetzt ein paar reguläre Ausdrücke, die tun, was Sie wollen, damit das angemessen abgedeckt ist.
Was wurde nicht erwähnt ist , warum Ihr Versuch wird nicht funktionieren: Innerhalb einer Zeichenklasse
$
(sowie^
,.
und/
) hat keine besondere Bedeutung, so[/$]
Einstimmungen entweder eine wörtliche/
oder eine wörtliche und$
nicht zur Einstellung des regex (/
) oder Anpassungs Zeilenende ($
).quelle
In Ruby und Bash können Sie
$
in Klammern verwenden./(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)
(Diese Lösung ähnelt der von Pete Boughton, behält jedoch die Verwendung von bei
$
, was das Ende der Zeile bedeutet, und nicht die Verwendung von\z
, was das Ende der Zeichenfolge bedeutet.)quelle
$
in Klammern verwendet werden()
kann. Es sind die Klammern[]
, die es wörtlich machen.$
funktioniert auf diese Weise in Javascript, wohingegen\z
dies nicht der Fall ist (Chrome 48, Firefox 43, IE9).