I use
YAPE::Regex::Explain to explain Regular Expressions:
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/999[89]\$/)->explain();
__END__
The regular expression:
(?-imsx:999[89]\$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
999 '999'
----------------------------------------------------------------------
[89] any character of: '8', '9'
----------------------------------------------------------------------
\$ '$'
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
Cheers,
Brent