Regex для соответствия URL-адреса конца строки или символа "/" - PullRequest
68 голосов
/ 06 октября 2008

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

Но не соответствует что-то вроде этого:

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

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

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

Ответы [ 4 ]

107 голосов
/ 06 октября 2008

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

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


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

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

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

54 голосов
/ 07 октября 2008

Теперь у вас есть пара регулярных выражений, которые будут делать то, что вы хотите, так что это достаточно полно.

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

39 голосов
/ 06 октября 2008
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$
15 голосов
/ 25 сентября 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...