re = /(?i)^(?!((<\/|<)(h[1-6]|ul|li|script|blockquote)(\s.+)*>))(.+)(?!(<(\/\3)>))$/m
str = '<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit</h2>
Vivamus vel tempor turpis, <strong>non rutrum quam</strong>. Suspendisse ac rhoncus felis, eget porta lectus.
Nam vulputate sapien risus, vel vehicula mi volutpat sed.
<ul>
<li>Sed feugiat nibh at nisl eleifend scelerisque.</li>
<li>Aliquam non maximus ipsum. Aliquam erat volutpat.</li>
</ul>
<h3>Praesent eget diam sit amet leo vehicula sagittis at quis tortor</h3>
Nunc nec sem ac nunc tincidunt aliquam ut nec dolor. Nulla facilisi.
<img alt="xxxx" src="xxx.png" class="xxxxx"/>
<caption><i>ccccc</i></caption>
<img alt="xxxx" src="xxx.png" class="xxxxx"/>
<i>ccccc</i>
<strong>Nunc nec sem ac nunc tincidunt aliquam ut nec dolor. Nulla facilisi.</strong>
Vivamus vel tempor turpis, <strong>non rutrum quam</strong>. Suspendisse ac rhoncus felis, eget porta lectus.
Nunc nec
Nunc nec
Nunc nec
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Vivamus vel tempor turpis <a href=""></a></p>— xxxxx (@xxxxxx) <a href="https://twitter.com/xxxx/status/x?ref_src=x">February 15, 2019</a></blockquote>
<script async src="" charset="utf-8"></script>'
subst = '<p>$5</p>'
result = str.gsub(re, subst)
# Print the result of the substitution
puts result
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html