In this case there is no difference, but that's just a coincidence. The first allows you to have multiple-character alternatives whereas the second doesn't, but allows you to exclude individual characters. For example:
Code:
a[bc] == a(b|c) == (ab|ac)
ab[cde] == ab(c|d|e) == a(bc|bd|be)
a[^bc] == (doesn't convert)
(doesn't convert) == (ab|cd)
ta0kira