Parse more cases of %{}

%() and %<> and %[] are all special cases of % plus some non alphanumeric
ascii character, where the matching closing character is not the same as the
opening one.

e.g.: %~foo~ is valid but %{foo{ is not