Регулярное выражение для извлечения части URL - PullRequest
3 голосов
/ 27 августа 2009

Я сегодня ленивый и не хочу этого выяснять. Мне нужно регулярное выражение, чтобы соответствовать 'jeremy.miller' и 'scottgu' из следующих входных данных:

http://codebetter.com/blogs/jeremy.miller/archive/2009/08/26/talking-about-storyteller-and-executable-requirements-on-elegant-code.aspx

http://weblogs.asp.net/scottgu/archive/2009/08/25/clean-web-config-files-vs-2010-and-net-4-0-series.aspx

Идеи? * * 1004

Редактировать

Крис Латс проделал большую работу, выполняя требования, указанные выше. Что если это были входные данные, чтобы вы не могли использовать «архив» в регулярном выражении?

 http://codebetter.com/blogs/jeremy.miller/
 http://weblogs.asp.net/scottgu/

Ответы [ 2 ]

7 голосов
/ 27 августа 2009

Будет ли это то, что вы ищете?

'/([^/]+)/archive/'

Захватывает часть перед «архивом» в обоих случаях. В зависимости от вкуса регулярных выражений вам нужно будет экранировать / s, чтобы он работал. В качестве альтернативы, если вы не хотите совпадать с партией archive, вы можете использовать прогнозирование, но мне не нравятся прогнозные переходы, и проще сопоставить много и просто захватить нужные вам части (на мой взгляд ), поэтому, если вы предпочитаете использовать предварительный просмотр для проверки того, что следующая часть archive, вы можете написать ее самостоятельно.

РЕДАКТИРОВАТЬ: Когда вы обновляете свой вопрос, моя идея о том, что вы хотите, становится нечеткой. Если вы хотите, чтобы новое регулярное выражение соответствовало вторым случаям, вы можете просто вытащить соответствующую часть с конца с теми же условиями /, что и раньше:

'/([^/]+)/$'

Если вам требуется текст jeremy.miller или scottgu, независимо от того, где они встречаются в URL-адресе, но только как «слова» в URL-адресе (т. Е. Не scottgu2), попробуйте это еще раз с / предостережение:

'/(jeremy\.miller|scottgu)/'

В качестве третьего варианта, если вам нужно поле после имени домена, , если только это поле не является "блогами", оно станет волосатым, особенно с / предостережение:

'http://[^/]+/(?:blogs/)?([^/]+)/'

Это будет соответствовать имени домена, необязательному полю blogs, а затем требуемому полю. Синтаксис (?:) - это группа без захвата , что означает, что она похожа на обычные скобки, но не захватывает значение, поэтому единственное захваченное значение - это значение, которое вы хотите. (?:) может меняться в зависимости от вашего вкуса регулярного выражения. Я не знаю, какой язык вы запрашиваете, но я преимущественно использую Perl, так что это регулярное выражение должно делать это, если вы используете PCRE. Если вы используете что-то другое, посмотрите на группы без захвата.

Wow. Это много разговоров о регулярных выражениях. Мне нужно заткнуться и опубликовать уже.

5 голосов
/ 27 августа 2009

Попробуйте это:

/\/([\w\.]+)\/archive/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...