Add EUI-48 and EUI-64 (MAC address) highlighting
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3a05e6811..0913a7906 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,11 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
-## [8.0.1] - unreleased
+## [8.1.0] - unreleased
+
+### Added
+
+- Added highlighting of EUI-48 and EUI-64 (MAC addresses)
 
 ### Changed
 
diff --git a/rich/default_styles.py b/rich/default_styles.py
index e320e3cad..ce1614373 100644
--- a/rich/default_styles.py
+++ b/rich/default_styles.py
@@ -61,6 +61,8 @@
     "repr.comma": Style(bold=True),
     "repr.ipv4": Style(bold=True, color="bright_green"),
     "repr.ipv6": Style(bold=True, color="bright_green"),
+    "repr.eui48": Style(bold=True, color="bright_green"),
+    "repr.eui64": Style(bold=True, color="bright_green"),
     "repr.tag_start": Style(bold=True),
     "repr.tag_name": Style(color="bright_magenta", bold=True),
     "repr.tag_contents": Style(color="default"),
diff --git a/rich/highlighter.py b/rich/highlighter.py
index 9fe859556..02a606bdd 100644
--- a/rich/highlighter.py
+++ b/rich/highlighter.py
@@ -80,6 +80,12 @@ class ReprHighlighter(RegexHighlighter):
         r"(?P<path>\B(\/[\w\.\-\_\+]+)*\/)(?P<filename>[\w\.\-\_\+]*)?",
         r"(?P<ipv4>[0-9]{1,3}\.[0-9]{1,3}\.[0-gt9]{1,3}\.[0-9]{1,3})",
         r"(?P<ipv6>([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})",
+        r"(?P<eui48>([0-9A-Fa-f]{1,2}-){5}[0-9A-Fa-f]{1,2})",  # EUI-48 6x2 hyphen
+        r"(?P<eui64>([0-9A-Fa-f]{1,2}-){7}[0-9A-Fa-f]{1,2})",  # EUI-64 8x2 hyphen
+        r"(?P<eui48>([0-9A-Fa-f]{1,2}:){5}[0-9A-Fa-f]{1,2})",  # EUI-48 6x2 colon
+        r"(?P<eui64>([0-9A-Fa-f]{1,2}:){7}[0-9A-Fa-f]{1,2})",  # EUI-64 8x2 colon
+        r"(?P<eui48>([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})",  # EUI-48 3x4 dot
+        r"(?P<eui64>([0-9A-Fa-f]{4}\.){3}[0-9A-Fa-f]{4})",  # EUI-64 4x4 dot
         r"(?<!\\)(?P<str>b?\'\'\'.*?(?<!\\)\'\'\'|b?\'.*?(?<!\\)\'|b?\"\"\".*?(?<!\\)\"\"\"|b?\".*?(?<!\\)\")",
         r"(?P<url>https?:\/\/[0-9a-zA-Z\$\-\_\+\!`\(\)\,\.\?\/\;\:\&\=\%\#]*)",
         r"(?P<uuid>[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12})",
diff --git a/tests/test_highlighter.py b/tests/test_highlighter.py
index 5e3798e86..242452dba 100644
--- a/tests/test_highlighter.py
+++ b/tests/test_highlighter.py
@@ -1,8 +1,34 @@
+"""Tests for the higlighter classes."""
 import pytest
-from rich.highlighter import NullHighlighter
+
+from rich.highlighter import NullHighlighter, ReprHighlighter
+from rich.text import Span, Text
 
 
 def test_wrong_type():
     highlighter = NullHighlighter()
     with pytest.raises(TypeError):
         highlighter([])
+
+
+@pytest.mark.parametrize(
+    "style_name, test_str",
+    [
+        ("repr.eui48", "01-23-45-67-89-AB"),  # 6x2 hyphen
+        ("repr.eui64", "01-23-45-FF-FE-67-89-AB"),  # 8x2 hyphen
+        ("repr.eui48", "01:23:45:67:89:AB"),  # 6x2 colon
+        ("repr.eui64", "01:23:45:FF:FE:67:89:AB"),  # 8x2 colon
+        ("repr.eui48", "0123.4567.89AB"),  # 3x4 dot
+        ("repr.eui64", "0123.45FF.FE67.89AB"),  # 4x4 dot
+        ("repr.eui48", "ed-ed-ed-ed-ed-ed"),  # lowercase
+        ("repr.eui48", "ED-ED-ED-ED-ED-ED"),  # uppercase
+        ("repr.eui48", "Ed-Ed-Ed-Ed-Ed-Ed"),  # mixed case
+        ("repr.eui48", "0-00-1-01-2-02"),  # dropped zero
+    ],
+)
+def test_highlight_regex(style_name: str, test_str: str):
+    """Tests for the regular expressions used in ReprHighlighter."""
+    text = Text(test_str)
+    highlighter = ReprHighlighter()
+    highlighter.highlight(text)
+    assert text._spans[-1] == Span(0, len(test_str), style_name)

## Type of changes

- [ ] Bug fix
- [x] New feature
- [ ] Documentation / docstrings
- [ ] Tests
- [ ] Other

## Checklist

- [x] I've run the latest [black](https://github.com/psf/black) with default args on new code.
- [x] I've updated CHANGELOG.md and CONTRIBUTORS.md where appropriate.
- [x] I've added tests for new code.
- [x] I accept that @willmcgugan may be pedantic in the code review.

## Description

Fixes #279.

Adds highlighting for IEEE EUI-48 and EUI-64 (mac addresses) accepting three formats:

* Six (EUI-48) or eight (EUI-64) groups of two hex digits with hyphen separators: `01-23-45-67-89-AB` or `01-23-45-FF-FE-67-89-AB`
* Six (EUI-48) or eight (EUI-64) groups of two hex digits with colon separators: `01:23:45:67:89:AB` or `01:23:45:FF:FE:67:89:AB`
* Three (EUI-48) or four (EUI-64) groups of four hex digits with dot separators `0123.4567.89AB` or `0123.45FF.FE67.89AB`

The first two forms are seemingly the most common, and are recommended in this IEEE document: 
https://standards.ieee.org/content/dam/ieee-standards/standards/web/documents/tutorials/eui.pdf
I've found the third form scattered around places, although don't have an "authoritative" reference.

The highlighting accepts case-insensitive hex digits (e.g. `aa`. `aA`, and `AA`), and unpadded hex groups (e.g. `00:01` and `0:1`).