У меня есть URL-адрес , и я пытаюсь сопоставить его с регулярным выражением, чтобы извлечь некоторые группы. У меня проблема в том, что URL-адрес может заканчиваться или продолжаться "/" и другим текстом URL. Я хотел бы сопоставить такие URL-адреса:
- http: // server / xyz / 2008-10-08-4
- http: // server / xyz / 2008-10-08-4 /
- http: // server / xyz / 2008-10-08-4 / 123 / подробнее
Но не совпадать примерно так:
Итак, я подумал, что лучше всего будет что-то вроде этого:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
где класс символов в конце содержал либо «/», либо конец строки. Тем не менее, классу символов не нравится наличие символа «$». Как мне лучше всего различать эти URL-адреса, сохраняя при этом правильные группы?
Теперь у вас есть пара регулярных выражений, которые будут делать то, что вы хотите, так что это адекватно покрыто.
Что не было упомянуто почему ваша попытка не будет работать: Внутри класса символов,
$
(а также^
,.
и/
) не имеет особого значения, поэтому[/$]
спичек либо буквенных/
или буквенных ,$
а не прекращения регулярных выражений (/
) или соответствия конец строки ($
).источник
В Ruby и Bash вы можете использовать
$
внутри круглых скобок./(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)
(Это решение похоже на решение Пита Боутона, но сохраняет использование
$
, что означает конец строки, а не использование\z
, что означает конец строки.)источник
$
нельзя использовать скобки()
в какой-либо реализации. Это скобки[]
делают его буквальным.$
работает таким образом в javascript, тогда как\z
нет (Chrome 48, Firefox 43, IE9).