Very good, but that can't be embedded into another regexp nicely. The equivalent to /[^$chars]*/ is /(?:(?!$re).)*/.
/[^$chars]*/ matches as many characters as possible, as long as none match the character class.
/(?:(?!$re).)*/ matches as many characters as possible, as long as no subsequence of them match the regexp.
A "few" example uses: Re^3: reg ex NOT, Re^3: Text::Balanced with nested / custom brackets, Re^2: regex for negating a sequence, Re: Regexp: Match anything except a certain word, Re^2: Regexp: Match anything except a certain word, Re: regex help please, Re: Extraneous behaviour of match variables, Re: How to split into paragraphs?, Re^3: How to split into paragraphs?, Re: text extraction question, etc.
Notes:
Keep in mind that both expressions can sucessfully match 0 characters if not properly anchored.
* can be replaced with other modifiers, like +, *?, {2}, etc.
This should be in the docs since it's a FAQ.
I think it would be nice if /(?:(?!$re).)*/ could be shortcutted to /(?^$re)/. It would be more readable, and it would help prevent the commmon misuse of negative lookahead (/(?!$re.*)/).
Updated: Fixed formatting, added stuff
In reply to Re^2: Negating Regexes: Tips, Tools, And Tricks Of The Trade
by ikegami
in thread Negating Regexes: Tips, Tools, And Tricks Of The Trade
by Limbic~Region
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |