I'd disagree with epp_b on number 2 and 3. In two, it's a difference in interpretation: if the forward slashes are supposed to be forward slashes, then the statement would delete any tag (opening or closing) that is not an <a> tag. In 3, the given replacement would delete any tags of any sort (presumably, those that are left over after replacing tags of types 1 and 2).
The first two could be better written using eregi_replace:
1. <br[^>]*>
2. </?([^a/]|[a-z_]{2,})[^>]*>
And the second in particular is crying out for the smarter (though more complicated) PCRE syntax:
preg_replace('#</?(?!a[>\s])[^>]*>#i', '', $vars['description']);
Which says "any tag (opening or closing) so long as it's not an "a" tag (which can be identified because it starts with "a" and is followed by either whitespace or a >).
On the other hand, (2) and (3) could just be done with strip_tags() anyway.