Mam adres URL i próbuję dopasować go do wyrażenia regularnego, aby wyciągnąć kilka grup. Problem polega na tym, że adres URL może kończyć się lub kontynuować znakiem „/” i innym tekstem adresu URL. Chciałbym dopasować takie adresy URL:
- http: // server / xyz / 2008-10-08-4
- http: // serwer / xyz / 2008-10-08-4 /
- http: // server / xyz / 2008-10-08-4 / 123 / more
Ale nie dopasowuj czegoś takiego:
Pomyślałem więc, że najlepiej będzie wyglądać tak:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
gdzie klasa znaków na końcu zawiera znak „/” lub koniec wiersza. Jednak klasa postaci nie jest zadowolona z umieszczonego tam znaku „$”. Jak najlepiej rozróżnić te adresy URL, jednocześnie wycofując prawidłowe grupy?
Masz teraz kilka wyrażeń regularnych, które będą robić, co chcesz, więc jest to odpowiednio uwzględnione.
Co nie zostało wspomniane jest, dlaczego próba nie będzie działać: wewnątrz klasy znaków,
$
(jak również^
,.
i/
) nie ma specjalnego znaczenia, więc[/$]
zapałek albo dosłowne/
lub dosłownym$
, a nie kończące regex (/
) lub dopasowanie koniec linii ($
).źródło
W Ruby i Bash możesz używać
$
nawiasów wewnętrznych./(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)
(To rozwiązanie jest podobne do rozwiązania Pete'a Boughton'a, ale zachowuje użycie
$
, co oznacza koniec wiersza, zamiast używania\z
, co oznacza koniec ciągu).źródło
$
którego nie można by użyć w nawiasach()
w żadnej implementacji. To nawiasy[]
sprawiają, że jest to dosłowne.$
działa w ten sposób w javascript, a\z
nie (Chrome 48, Firefox 43, IE9).