Будет ли это то, что вы ищете?
'/([^/]+)/archive/'
Захватывает часть перед «архивом» в обоих случаях. В зависимости от вкуса регулярных выражений вам нужно будет экранировать /
s, чтобы он работал. В качестве альтернативы, если вы не хотите совпадать с партией archive
, вы можете использовать прогнозирование, но мне не нравятся прогнозные переходы, и проще сопоставить много и просто захватить нужные вам части (на мой взгляд ), поэтому, если вы предпочитаете использовать предварительный просмотр для проверки того, что следующая часть archive
, вы можете написать ее самостоятельно.
РЕДАКТИРОВАТЬ: Когда вы обновляете свой вопрос, моя идея о том, что вы хотите, становится нечеткой. Если вы хотите, чтобы новое регулярное выражение соответствовало вторым случаям, вы можете просто вытащить соответствующую часть с конца с теми же условиями /
, что и раньше:
'/([^/]+)/$'
Если вам требуется текст jeremy.miller
или scottgu
, независимо от того, где они встречаются в URL-адресе, но только как «слова» в URL-адресе (т. Е. Не scottgu2
), попробуйте это еще раз с /
предостережение:
'/(jeremy\.miller|scottgu)/'
В качестве третьего варианта, если вам нужно поле после имени домена, , если только это поле не является "блогами", оно станет волосатым, особенно с /
предостережение:
'http://[^/]+/(?:blogs/)?([^/]+)/'
Это будет соответствовать имени домена, необязательному полю blogs
, а затем требуемому полю. Синтаксис (?:)
- это группа без захвата , что означает, что она похожа на обычные скобки, но не захватывает значение, поэтому единственное захваченное значение - это значение, которое вы хотите. (?:)
может меняться в зависимости от вашего вкуса регулярного выражения. Я не знаю, какой язык вы запрашиваете, но я преимущественно использую Perl, так что это регулярное выражение должно делать это, если вы используете PCRE. Если вы используете что-то другое, посмотрите на группы без захвата.
Wow. Это много разговоров о регулярных выражениях. Мне нужно заткнуться и опубликовать уже.