Как уже упоминалось в комментариях, Regex не является подходящим способом.
Это сказало: я придумал это (https://regex101.com/r/3OVaO2/2)
(<\w+\s*[^>]*)\s(?!href|title|alt)[\w\-\d]+=(?:(['"]).*?\2|\w+)
Однако, это удалит только ОДИН атрибут зла. Проблема в том, что с PCRE вы не можете иметь утверждения с переменной длиной за кадром. Если вы переключите его на ECMAscript, вы можете сделать это (https://regex101.com/r/3OVaO2/3)
(?<=<\w+\s*[^>]*)\s(?!href|title|alt)[\w\-\d]+=(?:(['"]).*?\1|\w+)
Это, вероятно, сделает то, что вы хотите. Тем не менее, это НЕ Святой Грааль для очистки HTML. Будьте осторожны с выходными данными, если не считаете их безопасными.
Кроме того, для определения тегов может потребоваться некоторая настройка, поскольку могут существовать такие теги, как <some-element>
, которые в настоящее время не обнаруживаются регулярным выражением.