# Matches an ANSI style (color or text option)
(?>
  (?<Console_Reset>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?<Reset>0m)                                                                           # 0m indicates reset

)
  |
  (?<Console_Bold>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<BoldStart>1m)  |
  (?<BoldEnd>22m))
)
  |
  (?<Console_Blink>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?>
  (?<BlinkStart>(?<BlinkSlow>5m)                                                       # 5m starts a slow blink
    |
    (?<BlinkFast>6m)                                                                   # 6m starts a slow blink
))  |
  (?<BlinkEnd>25m)                                                                     # 25m stops blinks
)
)
  |
  (?<Console_Faint>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<FaintStart>2m)                                                                    # 2m starts faint
  |
  (?<FaintEnd>22m)                                                                     # 22m stops faint
)
)
  |
  (?<Console_Italic>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<ItalicStart>3m)                                                                   # 3m starts italic
  |
  (?<ItalicEnd>23m)                                                                    # 23m stops italic
)
)
  |
  (?<Console_Invert>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<InvertStart>7m)                                                                   # 7m starts invert
  |
  (?<InvertEnd>27m)                                                                    # 27m stops invert
)
)
  |
  (?<Console_Hide>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<HideStart>8m)                                                                     # 8m starts hide
  |
  (?<HideEnd>28m)                                                                      # 28m stops hide
)
)
  |
  (?<Console_Strikethrough>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<StrikethroughStart>9m)                                                            # 9m starts Strikethrough
  |
  (?<StrikethroughEnd>29m)                                                             # 29m stops Strikethrough
)
)
  |
  (?<Console_Underline>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<UnderlineStart>4m)                                                                # 4m starts underline
  |
  (?<DoubleUnderlineStart>21m)                                                         # 21m start a double underline
  |
  (?<UnderlineEnd>24m)                                                                 # 24m stops underline
)
)
  |
  (?<Console_24BitColor>
(?-i)\e                                                                                # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<IsForegroundColor>38)  |
  (?<IsBackgroundColor>48)  |
  (?<IsUnderlineColor>58));2;(?<Color>(?<Red>(?>[0-2][0-5][0-5]|[0-1]\d\d|\d{1,2}))    # Red is the first 0-255 value
;(?<Green>(?>[0-2][0-5][0-5]|[0-1]\d\d|\d{1,2}))                                       # Green is the second 0-255 value
;(?<Blue>(?>[0-2][0-5][0-5]|[0-1]\d\d|\d{1,2}))                                        # Blue is the third 0-255 value
m)
)
  |
  (?<Console_8BitColor>
(?-i)\e                                                                                # An Escape
\[                                                                                     # Followed by a bracket
(?>
  (?<IsForegroundColor>38)  |
  (?<IsBackgroundColor>48)  |
  (?<IsUnderlineColor>58));5;(?<Color>(?>
  (?<StandardColor>[0-7])                                                              # 0 -7 are standard colors
m  |
  (?<BrightColor>(?>[8-9]|1[0-5]))                                                     # 8-15 are bright colors
m  |
  (?<CubeColor>(?>[0-2][0-3][0-1]|[0-1]\d\d|\d{1,2}))                                  # 16-231  are cubed colors
m  |
  (?<GrayscaleColor>(?>[0-2][0-5][0-5]|[0-1]\d\d|\d{1,2}))                             # 232-255 are grayscales
m))
)
  |
  (?<Console_4BitColor>
\e                                                                                     # An Escape
\[                                                                                     # Followed by a bracket
(?<Color>(?>
  (?<IsBright>1)?\;{0,1}                                                               # A 1 and a semicolon indicate a bright color
(?<IsForegroundColor>3)                                                                # A number that starts with 3 indicates foreground color
  |
  (?<IsBright>(?<IsForegroundColor>9))                                                 # OR it could be a less common bright foreground color, which starts with 9
  |
  (?<IsBright>1)?\;{0,1}                                                               # A 1 and a semicolon indicate a bright color
(?<IsBackgroundColor>4)                                                                # A number that starts with 3 indicates foreground color
  |
  (?<IsBright>(?<IsBackgroundColor>10))                                                # OR it could be a less common bright foreground color, which starts with 9
)(?<ColorNumber>[0-7])                                                                 # The color number will be between 0 and 7
(?:\;{0,1}(?<IsBright>1)?)?                                                            # Brightness can also come after a color
m)
)
  |
  (?<Console_DefaultColor>
(?-i)\e                                                                                # An Escape
\[                                                                                     # Followed by a bracket
(?<Color>(?>
  (?<DefaultForeground>39)                                                             # 39 Represents the default foreground color
m  |
  (?<DefaultForeground>49)                                                             # 49 Represents the default background color
m))
)
)
