Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > RegExp: домен 2-ого уровня


Автор: Vitaly333 15.8.2011, 23:22
Нужно написать регэксп, который извлекает из урла доменную часть 2-ого уровня.
Т.е. из http://server24.mail.vkb.ru - должен извлечь только vkb
Если доменное имя состоит из двух слов, разделенных дефисом и первое слово это test, то регэксп должен извлечь только 2-ую часть домена.
Т.е. в случае http://server24.mail.test-vkb.ru должен извлечь тоже только vkb
Я написал такой рэгэксп:
Код

"/^*(?<=test-|\.|//)([a-z0-9-_]*)\.(?=ru|com|net|org)* /"
 
Но он выводит test-vkb все равно. Т.е. срабатывает условие №2 в ретроспективной проверке.
Как сделать так, чтобы при успешности 1-ого условия остальные игнорировались? Или я OR неправильно записываю?

Автор: Evghenusi 16.8.2011, 00:30
если у тебя чисто список урл-ов, то:
Код
{[\w]+\.(?:ru|com|net|org)}i

Автор: x8m6 16.8.2011, 12:43
В остальных случаях (все кроме test-*) мне нужно выводить домен полностью.

Автор: Evghenusi 19.8.2011, 00:39
можно вытащить все домены где нет "test-" , но что бы "test-" не запоминалось не знаю как.
может просто вытаскивать все домены, а после проверять нет ли в них "куска" - "test-"?

Добавлено через 7 минут и 15 секунд
решил ещё подумать и осенило.....
Код
{(?:test-)?([\w-]+\.(?:ru|com|net|org))}i

набор строк
Код
http://server24.mail.vkb.ru
http://server24.mail.test-vkb.ru 
http://server24.mail.test.ru 
http://krivet-vkb.ru
http://test-vkb.ru

Всего совпадений 5
Код
1 : vkb.ru
1.1 : vkb.ru
2 : test-vkb.ru
2.1 : vkb.ru
3 : test.ru
3.1 : test.ru
4 : krivet-vkb.ru
4.1 : krivet-vkb.ru
5 : test-vkb.ru
5.1 : vkb.ru



Автор: Vitaly333 20.8.2011, 11:12
Спасибо, работает. +1 в карму.

Автор: Evghenusi 20.8.2011, 12:31
пасиб  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)