2012-07-04 6 views
-3

Я не очень хорошо разбираюсь в регулярных выражениях, и у меня есть простой вопрос.Я не могу найти регулярное выражение для этого регулярного выражения

У меня есть список ссылок на этом пути:

http://domain.com/andrei/sometext 
http://domain2.com/someothertext/sometextyouknow/whoknows 
http://domain341.com/text/thisisit/haha 

Я просто хочу два регулярных выражения, чтобы принять это:

http://domain.com/andrei/ 
http://domain2.com/someothertext/ 
http://domain341.com/text/ 

Это первое регулярное выражение, которое мне нужно, и Мне нужно другое регулярное выражение только для того, чтобы вынуть домен, но я думаю, что я это выясню, если кто-нибудь может сказать мне, что регулярное выражение выведет только то, что я написал.

+1

В зависимости от того, какой язык вы используете, вероятно, лучше, чтобы встроенная библиотека анализа синтаксиса позаботилась об этом. –

+2

Любите титул - это как дзэн-коан. – Oded

+0

Я пробовал это, но вынимает всю ссылку: http: // ([^ /]. * [^ /]) – user1461166

ответ

0

Используйте regex https?:\/\/[^\/]+\/[^\/]+/(.*) для вашей первой задачи - замените $1 на emtpy string ''.

Использовать регулярное выражение https?:\/\/([^\/]+) для вашей второй задачи - соответствие $1 является доменным именем.

5

Это то, что вы (скорее всего) необходимо:

[a-z]+://([^/ ]+)(?:/[^/ ]*/?)? 

Вот как это работает:

  1. [a-z]+ часть для имени протокола (это означает, что "1 или больше букв" - это будет соответствовать протоколу http/https/file/ftp/gopher/foo/whatever, но если вы хотите совместить только «http», вы можете написать его явно)
  2. :// это буквально то, что он говорит;)
  3. [^/ ]+ - один или несколько символов без косой черты и без пробела. это может быть «a», может быть fqdn, может быть ip-адресом. независимо от того,
  4. (?:/[^/ ]*/?)? - этот сложнее. В конце концов ? означает, что все это в круглых скобках может быть или не быть (это необязательно). ?: немедленно в круглых скобках означает, что не следует повторно использовать этот поднабор (ему не присваивается номер и его нельзя повторно использовать по этому номеру). [^/ ]* означает 0 или более несимметричных символов без пробела, а знак вопроса после конечной косой черты также указывает, что косая черта является необязательной.

В целом, это обеспечивает матчи для таких вещей, как это:

http://foo/bar/baz/something -> http://foo/bar/ 
http://hello.world.example.com/ -> http://hello.world.example.com/ 
http://foo.net -> http://foo.net 
ftp://ftp.mozilla.org/pub -> ftp://ftp.mozilla.org/pub 

Примечание # 1: Я не использовал ускользающей для слэша намеренно, чтобы сделать выражение более читаемым, поэтому убедитесь, что вы используете какой-то другой персонаж как delimiter, ИЛИ избегать всех появлений / - вместо этого использовать \/.

Примечание # 2: Добавить i модификатор, если вы хотите, чтобы выражение было нечувствительны к регистру (a-z не будет соответствовать колпачков), и g модификатор, если вы хотите сделать несколько матчей в один большой блок текста.

В матчах, подшаблон 0 будет вся соответствует вещь, и подшаблон 1 - только имя хоста

+0

Спасибо большое приятель! – user1461166

+0

Если вам нравится ответ, пожалуйста, пожалуйста, поддержите и примите ... – Sean

1

Это, вероятно, то, что вы ищете:

([a-zA-Z]+://([\w.]*)/(?:.*?/)?)

У вас есть все матч в группе 1 и просто в домене в группе 2. Нет необходимости в 2 регулярных выражениях. :)

Смежные вопросы