$result = preg_replace(
'%(?<=<span>) # Assert that there is a directly preceding span tag
<span> # Match a span tag
((?:(?!</?span>).)*) # Match the contents of the tag only if they do not include another span tag
</span> # Match a closing span tag
(?=</span>) # Assert that there is a directly following span tag
%six',
'\1', $subject);
будет работать на вашем примере, но его нужно применять дважды, потому что он удаляет один «слой» вложенных span
тегов за итерацию.
Итак, с произвольно вложенными тегами вам нужно будет вызывать это один раз для каждого уровня вложенности.