@AFI19

Как правильно составить регулярку для извлечение страны из домена?

Есть список доменов
  • inner.ge.site.com
  • new-site.ge

Как правильно составить регулярку, что бы получить код страны из поддомена ($patternSub) или доменной зоны ($patternDomainName)

$patternSub = '/(\.?ge)(\.[\-\w\d]+){2,}$/mui';

$patternDomainName = '/(\.ge)$/mui;


Данные паттерны работают.
Но, может их можно оптимизировать или сделать более правильно?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 3
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
В имени домена точно не должно быть перевода строки, поэтому только /s.
По поводу /u - сложный вопрос. Лучше было бы сразу конвертировать в Punycode, что-бы оперировать только с английскими доменными именами.
Итого, вытаскиваем TLD:
$patternSub = '/(\.[\-\w\d]{2,})$/si';

Здесь аналогично. Но непонятно, $patternDomainName - это когда из доменного имени уже убран TLD, и опять нужно найти TLD (который .ge)?
$patternDomainName = '/(\.ge)$/si;
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
У вас точками разделено, самое быстрое сделать сплит по точке и взять второй результат в обоих хостах

$regex = '~[.][^.]{2}([.]|$)~';

Читается как "точка, после которой идет две не точки, после них идет точка или конец строки".

Если страны заранее известны вместо "[^.]{2}" пишешь "(?:ru|de|ge|en|us)" что читается как "одно из не создавая группу"
Ответ написан
Комментировать
https://regex101.com/r/G5GaJX/1
В примере сделана проверка на www ее просто исключаем.
https://regex101.com/r/FYZx4q/1
тут дополнительно проверяем что в конце наш основной домен

https://regex101.com/r/dClrVg/1
Объединяем оба правила и выделяем только "регион" как вы выразились
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы