add_filter('the_content', 'spoilers');
function spoilers( $text ){
$text = preg_replace('/(<\/ol>)(((?!<li.*>|<\/li>|<ol.*>|<\/ol>).)*?)(<\/li>)/s', '$1$2</div></div>$2$4', $text);
$text = preg_replace('/(<li>((?!<li.*>|<\/li>|<ol.*>|<\/ol>).)*?)(<ol>)/s', '$1<div class="spoil"><button class="sp_button>Подробности</button><div class="sp_text">$2$3', $text);
return $text; var exprPng = / *([^ ]+\.png) */g;
var exprPngP = /([^ ]+\.png">)(.*?)(?=<img src=|$)/g;([^ ]+\.png) *(.*?) *(?=[^ ]+\.png|$) — работает хорошо при любом завершении и даже без комментариев. Минус только в том, что результат с ним всегда будет заканчиваться наполненным или пустым тегом «<p>» — терпимо.