Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Regular Expression for MAC Address

by marius (Hermit)
on May 26, 2001 at 00:05 UTC ( [id://83405]=perlquestion: print w/replies, xml ) Need Help??

marius has asked for the wisdom of the Perl Monks concerning the following question:

Monks,
Does anyone have a regex that will successfully match a MAC address that is better than the following?

I'd like to be able to match the 00:00:00:00:00:00 or the 00-00-00-00-00-00 notation. Thanks!

[0-9a-f][0-9a-f][:-][0-9a-f][0-9a-f][:-][0-9a-f][0-9a-f][:-][0-9a-f][0 +-9a-f][:-][0-9a-f][0-9a-f][:-][0-9a-f][0-9a-f]


-marius

Replies are listed 'Best First'.
Re: Regular Expression for MAC Address
by petdance (Parson) on May 26, 2001 at 00:38 UTC
    The bummer with what you have there, besides being long, is that it matches stuff if you've got the colons and the dashes intermingled in the same string, which is probably NOT what you want. Try this chunk of code out:
    #!/usr/bin/perl -w use strict; my $d = "[0-9A-Fa-f]"; my $dd = "$d$d"; while (<DATA>) { /($dd([:-])$dd(\2$dd){4})/o && print $1, "\n" } __END__ My MAC address is 00-00-00-00-00-00 over there, and it's 00:00:00:00:00:00 over here, and the date/time happens to be 2001-05-25-15:27. Note that 00:00-00:00-00:00 isn't really valid. Oh, and I have one address of DE:AD:BE:EF:21:12.
    When I run it, I get the following output
    00-00-00-00-00-00 00:00:00:00:00:00 DE:AD:BE:EF:21:12
    Note that it skipped the 4th sample line where the dashes 'n' colons are intermingled.

    xoxo,
    Andy

    %_=split/;/,".;;n;u;e;ot;t;her;c; ".   #   Andy Lester
    'Perl ;@; a;a;j;m;er;y;t;p;n;d;s;o;'.  #   http://petdance.com
    "hack";print map delete$_{$_},split//,q<   andy@petdance.com   >
    
      Petdance,
      Good catch on the intermixed colons and dashes. The thought of that honestly had not crossed my mind. The backreferencing was a good way to do this. It's not very often that I run across spots to backref in a match or the LHS of a substitution. ++ all around to all responders!

      -marius
      Hi I have log files that look like this
      Mar 14 14:54:13 10.70.204.11 Draper-1-01-office-01 (Info): Station [re +snet204-011.wireless]00022d33a500 Authenticated Mar 14 14:54:13 10.70.204.11 Draper-1-01-office-01 (Info): Station [re +snet204-011.wireless]00022d33a500 Reassociated Mar 14 14:58:14 10.70.204.11 Draper-1-01-office-01 (Info): Deauthentic +ating [resnet204-034.wireless]00022d250968, reason "Must Authenticate + Before Ass ociating" Mar 14 14:58:14 10.70.204.11 Draper-1-01-office-01 (Info): Station [re +snet204-034.wireless]00022d250968 Authenticated Mar 14 14:58:14 10.70.204.11 Draper-1-01-office-01 (Info): Station [re +snet204-034.wireless]00022d250968 Reassociated Mar 14 14:59:47 10.70.204.11 Draper-1-01-office-01 (Info): Started dri +ver for port "awc0" Mar 14 14:59:47 10.70.204.11 Draper-1-01-office-01 (Info): Started dri +ver for port "fec0" Mar 14 15:00:04 10.70.204.11 Draper-1-01-office-01 (Info): Bound "AWC +Packet Router" protocol to device "rptr2" Mar 14 15:00:04 10.70.204.11 Draper-1-01-office-01 (Info): Bound "AWC +DDP Protocol" protocol to device "rptr2"
      As you see the MAC address are not in':' or "-" seperated.

      In the above case how do I find the MAC address

        I think this found all the MAC's in your post but it's a little difficult to tell.

        You might like to read Site How to - post code

        C:\test>perl -nle" print $1 while m[([0-9a-f]{12})]ig" - Hi I have log files that look like this Mar 14 14:54:13 10.70.204.11 D +raper-1-01-office-01 (Info): Station resnet204- 011.wireless00 022d33a500 Authenticated Mar 14 14:54:13 10.70.204.11 Draper-1-01-offi +ce-01 (Info): Station resnet204- 011.wireless00022d33a500 Reas sociated Mar 14 14:58:14 10.70.204.11 Draper-1-01-office-01 (Info): De +authenticating resnet204-034.wireless00022d250968, reason "Mus t Authenticate Before Ass ociating" Mar 14 14:58:14 10.70.204.11 Drape +r- 1-01-office-01 (Info): Station resnet204-034.wireless00022d 250968 Authenticated Mar 14 14:58:14 10.70.204.11 Draper-1- 01-office- +01 (Info): Station resnet204-034.wireless00022d250968 Reassoci ated Mar 14 14:59:47 10.70.204.11 Draper-1-01- office-01 (Info): Start +ed driver for port "awc0" Mar 14 14:59:47 10.70.204.11 Draper- 1-01-office-01 (Info): Started driver for port "fec0" Mar 14 15:00:04 +10.70.204.11 Draper-1-01-office-01 (Info): Bound "AWC Packet R outer" protocol to device "rptr2" Mar 14 15:00:04 10.70.204.11 Draper- +1-01-office-01 (Info): Bound "AWC DDP Protocol" protocol to de vice "rptr2" As you see the MAC address are not in':' or "-" seperated +. In the above case how do I find the MAC address 00022d33a500 00022d33a500 00022d250968 00022d250968 00022d250968 ^Z

        Examine what is said, not who speaks.
        1) When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong.
        2) The only way of discovering the limits of the possible is to venture a little way past them into the impossible
        3) Any sufficiently advanced technology is indistinguishable from magic.
        Arthur C. Clarke.
Re: Regular Expression for MAC Address
by MeowChow (Vicar) on May 26, 2001 at 00:19 UTC
    Are you trying to extract the address or just check for a match?

    To check for a match:

    /^([0-9a-f]{2}([:-]|$)){6}$/i
    To extract the address:
    @nums = split /[:-]/, $mac;
    To match and extract an address whole, from a line containting other text:
    /((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})/i
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print
Re: Regular Expression for MAC Address
by bikeNomad (Priest) on May 26, 2001 at 00:13 UTC
    my $re = qr{(?:[0-9a-f][0-9a-f][-:]){5}[0-9a-f][0-9a-f]};
Re: Regular Expression for MAC Address (potentially relevant thread)
by ybiC (Prior) on May 26, 2001 at 17:08 UTC
        Hi marius,
    The thread "One for the regexp fans" from last fall also deals with parsing MAC addresses, albeit from a little different angle.   Might be something there of interest to you (in addition to good answers already provided above).
        cheers,
        Don
        striving toward Perl Adept
        (it's pronounced "why-bick")
Re: Regular Expression for MAC Address
by virtualsue (Vicar) on Sep 06, 2001 at 18:29 UTC
    Today I needed a regex in order to validate a MAC address field from a form. The other responses in this thread are excellent, but here's another alternative for this task:
    ^(?:[[:xdigit:]]{1,2}[-:]){5}[[:xdigit:]]{1,2}$
    I wanted to allow a user to type in a:b:c:d:e:f instead of 0a:0b:0c:0d:0e:0f, hence the {1,2} quantifiers. Using the POSIX character class :xdigit: tidies things up and makes it obvious what input is required, which helps document the code. I liked petdance's solution (++), but didn't use it because in my application I only wanted to allow ':' as the separator.

    Thanks to the helpful CB people who assisted me with this: blakem, demerphq, davorg & Petruchio.
Re: Regular Expression for MAC Address
by jrynz (Initiate) on May 20, 2007 at 02:12 UTC
    Try this one:
    ((?:(\d{1,2}|[a-fA-F]{1,2}){2})(?::|-*)){6}
    Example Usage (extract MAC address):
    my $string = 'tu0 1500 <Link> 00-00-f8-05-c8-20'; $string =~ m/^.+ ( # Start back reference capture for MAC Address ((?:(\d{1,2}|[a-fA-F]{1,2}){2})(?::|-*)){6} ) # End back reference $/xms; print "$1\n" if (defined $1);
    NB: This will also work with MAC like:
    my $string = 'tu0   1500  <Link>  00:00:f8:05:c8:20';
Re: Regular Expression for MAC Address
by kwolters (Acolyte) on May 26, 2001 at 00:19 UTC
    /[0-9a-f]{2}[:-][0-9a-f]{2}[:-][0-9a-f]{2}[:-][0-9a-f]{2}[:-][0-9a-f]{2}[:-][0-9a-f]{2}/ That cuts it down a little.
Re: Regular Expression for MAC Address
by tchrist (Pilgrim) on Feb 18, 2012 at 18:29 UTC
    $ perl -MRegexp::Common -E 'say $RE{net}{MAC}' (?:(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[ +0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}))
Re: Regular Expression for MAC Address
by Anonymous Monk on Feb 18, 2012 at 16:22 UTC
    This might help you : http://manoharbhattarai.wordpress.com/2012/02/17/regex-to-match-mac-address/

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://83405]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-03-19 05:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found