1. Single Quote
my $SINGLE = qr{'(?:\\.|[^'\\])*'};
2. Double Quote
my $DOUBLE = qr{"(?:\\.|[^"\\])*"};
3. Host Name
my @hosts = qw( 2aa.com aa2.to a..com
ab..net a.com a2.com aa.234.com
a.b.c.d_f.com ana.inter );
for ( @hosts )
{
if ( $_ =~ m/^
(
(?! [-_0-9]) # first symbol is not -_[0-9] (optional)
[\w]+ # first sybmol is letter!
)
(?> # optimization
\.[-\w]+ # one or more number of [-\w] after \.
)* # or nothing
(?<=..) # as minimum 2 symbols before!
\.[a-z]{2,4} # .com .net .ru .info etc.
$/x
&&
$_ !~ m/(?>[-_.]{2,})/ ) # .-_ can not be together (optional)
{ print "match: $_\n"; }
else { print "not : $_\n"; }
}
# not : 2aa.com
# match: aa2.to
# not : a..com
# not : ab..net
# not : a.com
# match: a2.com
# match: aa.234.com
# match: a.b.c.d_f.com
# not : ana.inter