Because there's non-programmers in this community, if you aren't sure what this means but are too afraid to ask, it's a Regular Expression that better represents the terms "Linux" and "Unix."
Though if we're going to be that pedantic, it would be [nN][uiI][xX]$. That extra pipe wouldn't actually do anything in the last example, because regexp picks one character from the set by default.
And if we want to be really pedantic,
(?!nix)[nN][uI][xX]$
Would be the most accurate.
Edit: based on comments, I think...
(nux|NIX)$
...would be the best. Then you don't wind up with weird matches with things like UNiX.
Actually *nix isn't a Regular Expression, because the star operator * requires a preceding character or object to apply to. This is a wildcard for the shell style globbing, where a single star doesn't require a second object.
Yes, but you can really only do that with single characters, since your first example is an ordered group and the second is an unordered set in a capturing group. The equivalency drops off when you include more characters.
Plus, you can do things like [a-zA-Z], and you can't do that with the former example.
I would imagine there's a difference in computing overhead, too, but I have no idea which is more performant.