Don’t you need to actually capture for that to work? i.e. for variant #2:
-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \
(Note: untested)
Without the -r argument back-references (like \1) won’t work unless each parenthesis is escaped with a \ character.
With -r, argument back-references (like \1) won’t work unless the parenthesis are NOT escaped.