Предполагается, что оно также должно быть не пустым:
^[^\] ><"#%{}|\\^~\[`]+$
Так как кто-то отрицает это, вот код теста:
ary = [' ', '<', '>', '"', '#', '%', '{', '}', '|', '\\', '^', '~', '[', ']', '`', 'a']
ary.each do |i|
puts i =~ /^[^\] ><"#%{}|\\^~\[`]+$/
end
Выход:
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
0