Find a criminal from his ear, finger, and head
Ruby 1.9.3 - 173 157 143

x=(1..81).select{|j|$*[0].split(?,).all?{|y|i=j-1
z='SML'
[z[i%9/3]+?H,z[i%3]+?E,z[i/27]+?B,z[i/9%3]+?F].member?(y[-2,2])^y[?!]}}
p x==[]?[0]:x


Edit: 


applied Three If By Whiskey's tips.
taken parameters from the command line to save some more chars


Online demo: http://ideone.com/lodTLt