Попробуйте это:
$str = preg_replace('/"(?=[^<>]*+>)/', '"', $str);
Из вашего описания я понимаю, что вы имеете в виду «внутри HTML тега » ( объявление на самом деле ничего не значит в этом контексте). Я также предполагаю, что внутри тега не может быть символов '<'
или '>'
(поскольку они являются допустимыми в указанных значениях атрибутов).
Взгляд в будущее (?=[^<>]*+>)
утверждает, что впереди есть правая угловая скобка, а между здесь и там нет никаких других угловых скобок. Предполагая, что каждая угловая скобка является частью сбалансированной пары, это должно означать, что текущая позиция находится внутри тега HTML.