If I write (a perfectly valid HTML4):
<div id=foo>
TextMate highlights everything up to next quoted string as an ID attribute. The fix for it is to set: end = '(?<=''|")|(?!>)'; for tag-id-attribute in HTML's language definition.
There's even no scope for non-quoted attributes. I've managed to add it using back-assertions (?<=[^=]) for attribute and (?<==) for scope of uquoted string.
I'm not sure if these are proper solutions - does TM understand something like 'adjacent scopes'?