Parece que não consigo editar a postagem principal, então adicionarei minha resposta aqui.
Para nome do host - resposta fácil, no exemplo egrep aqui - http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
egrep '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
Embora o caso não represente valores como 0 no primeiro octeto e valores maiores que 254 (endereço IP) ou 255 (máscara de rede). Talvez uma declaração if adicional ajudaria.
Quanto ao nome de host DNS legal, desde que você verifique apenas nomes de host da Internet (e não intranet), escrevi o seguinte trecho, uma mistura de shell / php, mas deve ser aplicável como qualquer expressão regular.
primeiro acesse o site da ietf, faça o download e analise uma lista de nomes de domínio legais de nível 1:
tld=$(curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed 1d | cut -f1 -d'-' | tr '\n' '|' | sed 's/\(.*\)./\1/')
echo "($tld)"
Isso deve fornecer uma boa parte do código re que verifica a legalidade dos principais nomes de domínio, como .com .org ou .ca
Em seguida, adicione a primeira parte da expressão de acordo com as diretrizes encontradas aqui - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (qualquer combinação alfanumérica e símbolo '-', o traço não deve estar o começo ou o fim de um octeto.
(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+
Em seguida, junte tudo (exemplo PHP preg_match):
$pattern = '/^(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+(AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|YE|YT|YU|ZA|ZM|ZW)[.]?$/i';
if (preg_match, $pattern, $matching_string){
... do stuff
}
Você também pode adicionar uma instrução if para verificar se a string que você está verificando tem menos de 256 caracteres - http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html