Подтвердить что ты не робот

Регулярное выражение соответствует символу конца строки или символу "/"

У меня есть URL, и я пытаюсь сопоставить его с регулярным выражением, чтобы вытащить некоторые группы. Проблема, с которой я сталкиваюсь, заключается в том, что URL-адрес может либо закончить, либо продолжить "/" и больше текста URL. Я хотел бы сопоставить URL-адреса следующим образом:

Но не подходит что-то вроде этого:

Итак, я думал, что мой лучший выбор был примерно таким:

/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]

где класс символов в конце содержал либо "/", либо конец строки. Класс символов, похоже, не радует "$". Как я могу наилучшим образом различать эти URL-адреса, сохраняя при этом правильные группы?

4b9b3361

Ответ 1

/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$

Ответ 2

Чтобы соответствовать либо/или концу содержимого, используйте (/|\z)

Это применимо только в том случае, если вы не используете многострочное сопоставление (т.е. вы сопоставляете один URL-адрес, а не список URL-адресов, разделенных символом новой строки).


Чтобы добавить это с обновленной версией того, что у вас было:

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z)

Обратите внимание, что я изменил старт на не-жадное совпадение для не-whitespace (\S+?) вместо того, чтобы сопоставлять что-либо и все (.*)

Ответ 3

Теперь у вас есть пара регулярных выражений, которые будут делать то, что вы хотите, чтобы они были адекватно покрыты. Не было указано, почему ваша попытка не будет работать: внутри класса символов $ (а также ^, ., и /) не имеет особого значения, поэтому [/$] соответствует либо буквальному /, либо литералу $ вместо завершения регулярного выражения (/) или соответствия конца строки ($).

Ответ 4

В Ruby и Bash вы можете использовать $ внутри круглых скобок.

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)

(Это решение похоже на Pete Boughton's, но сохраняет использование $, что означает конец строки, а не использование \z, что означает конец строки.)