http://www.perlmonks.org?node_id=326436

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

I have two regular expressions (thanks to you guys explaining in great detail how this all works) that to my mind are logical equivalent (well excluding one case, but I think I want the extra case anyway). The expression I would like is:
/.*(\[*\w*\@*\-*\w*[$ #\%>~]\]|\\\[\\e\[0m\\\] \[0m)\s?/
What I think it does is:
    match as much as possible
    possibly match [
    possibly match some word characters
    possibly match some @
    possibly match some -
    possibly match some word characters
    match either $ ' ' # % > or ~
    possibly match ]
    or it matches weird escape sequence.

    and maybe a whitespace

Now I think that it should be logically equivalent to the expression below (except for the possibility of having [w@-w ] which was not allowed before, but I am ok with that due to serious clarity and mantainibility issues with this)
/.*([$ #\%>~]|\[*\w*\@*\-*\w*\%\]*|\[*\w*\@*\-*\w*#\]*|\[*\w*\@*\-*\w* +\$\]*|\[*\w*\@*\-*\w*>\]*|\\\[\\e\[0m\\\] \[0m)\s?/

Tomorrow I will probably convert most (if not all) of the * to ? because somewhere I heard greedyness is the root of all evil.
Thanks for your patients
Jack