in reply to Match all emails from all subdomains for a domain except one..

Something like this?

/@(?!bar\.).*\.example\.com$/
though that rejects "...@bar.foo.example.com" as well. This might be a good thing or a bad thing or a don't-care thing, you didn't specify.

So you could instead go for:

/@(?!bar\.example\.com$).*\.example\.com$/

If your teacher will let you declare a variable, then you could even use:

my $ex= ".example.com"; # ... if( /@(?!bar\Q$ex\E$)\Q$ex\E$/ ) {
or
my $ex= quotemeta(".example.com"); # ... if( /@(?!bar$ex$)$ex$/ ) {
But all of these don't reject "...@foo.bar.example.com" which you might want to do, so you could go for:
/@(.*\.)?(?!bar\.)[^.]+\.example\.com$/
/@((.*\.)?(?!bar\.)[^.]+\.)?example\.com$/
Updated based on shenme's reply.

                - tye

Replies are listed 'Best First'.
Re: Re: Match all emails from all subdomains for a domain except one.. (tye)
by shenme (Priest) on Aug 09, 2003 at 07:36 UTC
    Whoops, that last RE fails against just "@example.com".

    I think I've got it working with negative look-behind, but try to think of other test cases.

    while( <DATA> ) { my( $expect, $string ) = split; my $result = $string =~ m/ @ (?: .* (?<! [@.] bar) \. )? example\.com $ /xi ? 'match' : 'fail'; printf " Got result '%s' when expecting '%s' on '%s'\n", $result, $expect, $string unless $result eq $expect; } __END__ match smith@example.com match jones@example.com match jones@foo.example.com fail jones@bar.example.com fail jones@foo.bar.example.com match jones@baz.example.com match jones@bbar.example.com fail jones@bar.example.com.com fail rednose@reindeer.org fail smythe@exzample.com fail teacher@make-an-example.com