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 >
| [reply] [Watch: Dir/Any] [d/l] [select] |
|
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
| [reply] [Watch: Dir/Any] |
|
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
| [reply] [Watch: Dir/Any] [d/l] |
|
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.
| [reply] [Watch: Dir/Any] [d/l] |
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 | [reply] [Watch: Dir/Any] [d/l] [select] |
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]};
| [reply] [Watch: Dir/Any] [d/l] |
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") | [reply] [Watch: Dir/Any] |
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.
| [reply] [Watch: Dir/Any] [d/l] |
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'; | [reply] [Watch: Dir/Any] [d/l] [select] |
|
| [reply] [Watch: Dir/Any] |
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. | [reply] [Watch: Dir/Any] [d/l] |
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}))
| [reply] [Watch: Dir/Any] [d/l] |
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/ | [reply] [Watch: Dir/Any] |