Hi, My original regex to match ips is this: "$_ =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}/;", which is ok. But matching dns name is still a problem.
K.Prabakar's suggestion looks good but also failed the test: "$_ =~ /^\w\w*-?\w+?[\.\w\w*-?\w+?]*$/", It will match an invalid dns name like this (host-.domain.com) as a valid. I'm still working on it, but will welcome any other suggestion. Babs ||-----Original Message----- ||From: Steve Bertrand [mailto:[EMAIL PROTECTED] ||Sent: Wednesday, October 13, 2004 5:24 PM ||To: K.Prabakar ||Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED] ||Subject: Re: Regex to match valid host or dns names || ||> ||>> example below, it fails to match "host-no.top-level" as a valid host ||>> name. I modify the regex several times - but still don't get the ||>> right ||>> outlook. ||>> ||>> my @hosts = qw(192.168.22.1 192.168.22.18 localhost ||>> another.host.domain ||>> host-no.top-level my.host.domain.com); ||>> foreach (@hosts){ ||>> # Works ok ||>> push (@ips, $_ ) if $_ =~ /^\d{1,3}\.\d{1,3}\.\d{1|3}/; ||>> ||>> # Can't match "host-no.top-level". ||>> push (@dns, $_) if $_ =~ /^\w+-?[\w+]?\.?[\w+.{1}]*\w+$/; ||>> } || ||I'm just beginning to learn a bit about some of the more obscure ||regex's, but I'd like to ask if this following regex would ensure no ||IP's got trapped in the @dns array? (Assuming that no .tld ends in a ||\d): || ||push (@dns, $_) if $_ =~ /^\w+-?[\w+]?\.?[\w+.{1}]*[a-zA-Z]{2,3}$/; || ||Steve || || || || ||> ||> ||> ||> ||> /^\w+-?[\w+]?\.?[\w+.{1}]*\w+$/------>Here you look for only one "-" ||> and ||> also not allowing any other non-word charaters(like hyphen). ||> ||> The "." can match any character even other than "-" . ||> ||> You can think like this:(For IP's) ||> search for a number with maximum 3 digits and ||> then followed by the same kind of 3 numbers but prefixed with a dot. ||> Try this ---> $_ =~ /^\d{1,3}[\.\d{1,3}]{3}/ ||> ||> You can think like this:(For DNS's) ||> search for a WORD which may(-?) contain hyphen ||> within it and then followed by the same kind of zero-or-more-WORDs ||> but prefixed with a dot which is a normal dns name pattern. ||> ||> Try this ----> $_ =~ /^\w\w*-?\w+?[\.\w\w*-?\w+?]*$/ ||> ||> But this will allow IP's also in your "@dns" because \w can match ||> digits ||> also. ||> ||> ||> ||> -- ||> Regards, ||> K.Prabakar ||> ||> -- ||> To unsubscribe, e-mail: [EMAIL PROTECTED] ||> For additional commands, e-mail: [EMAIL PROTECTED] ||> <http://learn.perl.org/> <http://learn.perl.org/first-response> ||> ||> ||> || || || ||-- ||To unsubscribe, e-mail: [EMAIL PROTECTED] ||For additional commands, e-mail: [EMAIL PROTECTED] ||<http://learn.perl.org/> <http://learn.perl.org/first-response> -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>