roughly supports !
has_suffix supports bang
has_prefix supports !