Парсинг доменного имени - PullRequest
       1

Парсинг доменного имени

1 голос
/ 27 августа 2010

Я разбираю доменное имя из строки на strchr() последней.(точка) и обратный отсчет до точки до этого (если есть), тогда я знаю, что у меня есть свой домен.

Это довольно неприятный фрагмент кода, и мне было интересно, есть ли у кого-нибудь лучший способ.

Возможные строки, которые я могу получить:

  • domain.com
  • Some.domain.com
  • some.some.domain.com

Вы поняли идею.Мне нужно извлечь часть "domain.com".

Прежде чем вы скажете мне пойти поискать в Google, я уже сделал.Нет ответа, поэтому я спрашиваю здесь.

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ:

У меня есть строка с полным именем хоста.Обычно это происходит в форме what.domain.com, но может принимать и другие формы, и, как кто-то упомянул, оно может иметь what.domain.co.uk.В любом случае мне нужно разобрать доменную часть имени хоста: domain.com или domain.co.uk

Ответы [ 3 ]

2 голосов
/ 27 августа 2010

Вы имели в виду strrchr()?

Я, вероятно, подхожу к этому, выполнив:

  1. strrchr, чтобы получить последнюю точку в строке, сохраните указатель здесь,замените точку на NUL ('\0').
  2. strrchr снова, чтобы получить следующую до последней точки в строке.Символ после это начало искомого имени (domain.com).
  3. Используя указатель, который вы сохранили в # 1, поместите точку туда, где вы установили ее NUL.

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

Редактировать: Для обеспечения необходимой вам гибкости с точки зрения example.co.uk и других, функция, описанная выше, будет принимать дополнительный параметр, сообщающий, сколько компонентов нужно извлечь из конца имени.

Вы сами решаете, как решить, сколько компонентов извлечь - как упоминает Филипп Поттер в комментарии ниже, это трудная проблема.

2 голосов
/ 28 августа 2010

Это не ответ на сам вопрос, а идея альтернативного подхода:

В контексте и без того очень неприятного кода я бы сказал, что хороший способ сделать его менее неприятным и обеспечить хорошую возможность синтаксического анализа доменных имен и т.п. - это использовать PCRE или аналогичную библиотеку для регулярных выражений , Это, безусловно, поможет вам, если вы также захотите проверить, например, существует ли tld.

Для первоначального изучения может потребоваться некоторое усилие, но если вам нужно внести изменения в существующий код сопоставления / анализа или создать больше кода для сопоставления строк - я бы сказал, что regex-lib может сильно упростить это долгосрочный Специально для более сложного соответствия.

Другая библиотека, которую я помню, которая поддерживает регулярные выражения, это glib.

0 голосов
/ 27 августа 2010

Не уверен, какой вариант C, но вы, вероятно, хотите токенизировать домен, используя "."в качестве разделителя.

Попробуйте это: http://www.metalshell.com/source_code/31/String_Tokenizer.html

Что касается доменного имени, не знаю, какова ваша конечная цель, но домены могут иметь множество узлов, вы можете иметьимя домена foo.baz.biz.boz.bar.co.uk.

Если вам нужны только два последних узла, используйте выше и получите два последних токена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...