Я построил такое регулярное выражение некоторое время назад, хотя выглядит немного страшно :). Вот чистое регулярное выражение, вам может потребоваться дополнительно замаскировать специальные символы для соответствия вашим языковым требованиям.
(\son[a-z]+\s*=\s*"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"(?=[^<]*?>))|(\son[a-z]+\s*=\s*'[^'\\\r\n]*(?:\\.[^'\\\r\n]*)*'(?=[^<]*?>))
Вот замаскированная версия (в соответствии со стандартами Java), которую вы должны использовать в качестве строки.
(\\son[a-z]+\\s*=\\s*\"[^\"\\\\\\r\\n]*(?:\\\\.[^\"\\\\\\r\\n]*)*\"(?=[^<]*?>))|(\\son[a-z]+\\s*=\\s*'[^'\\\\\\r\\n]*(?:\\\\.[^'\\\\\\r\\n]*)*'(?=[^<]*?>))
Он смотрит только внутри тегов и учитывает замаскированные кавычки внутри событий. Я уверен, что это не 100% пуленепробиваемый, хотя.