Regular Expression for Random pattern

What would be the regular expression that can search for a Pattern, having 8 characters out of which atleast 1 digit, 1 lower case, 1 upper case letter and 1 special character must be there. But these can occur at any place randomly. Please help me out.
I'm using find $dir -name "*.txt" -exec egrep -ni "[a-z]+[A-Z]+[0-9]+['\~', '\!', '\$', '\%', '\^', '\&', '\-', '\=',' \.', '\:', '\;']" {} \; -print
But this is working only for pattern that begins with lower then upper then digit and then special characters. What if they can happen at any random place... :confused:
Thanks in advance...:slight_smile: