Desejo excluir todas as tags html dentro de 2 outras tags, exceto <a href=.*?">
e</a>
Por exemplo:
<p class="mb-40px">Another blending </h2>option is to all the <div>brushstrokes to show. In the painting of trees above, I didn’t spend much time trying to <a href=https://orfun.com/acrylic class="color-bebe" target="_new">blend the colors</a>. I simply mix each color and apply it without fussing with it.</p>
Saída:
<p class="mb-40px">Another blending option is to all the brushstrokes to show. In the painting of trees above, I didn’t spend much time trying to <a href=https://orfun.com/acrylic class="color-bebe" target="_new">blend the colors</a>. I simply mix each color and apply it without fussing with it.</p>
Meu regex não é muito bom:
ENCONTRAR:<p class="mb-40px">.*?</p>(?!</a>)|(?!<a href=.*?">)
(?:<p class="mb-40px">|\G).*?\K(?:<a href=.+?</a>(*SKIP)(*FAIL)|<(?:(?!/?p).)+?>)
LEAVE EMPTY
Explicação:
Captura de tela (antes):
Captura de tela (depois):
ENCONTRAR:
(?:<p class="mb-40px">|\G).*?\K(?:<a href=.+?</a>(*SKIP)(*FAIL)|<(?:(?!/?p class="mb-40px">|/p>).)+?>)
SUBSTITUIR POR:
LEAVE EMPTY
OU:
ENCONTRAR:
<p class="mb-40px">(?:[^<]+|<(?!/?[ap]|a\s[^>]>))?</p>(*SKIP)(FAIL)|<(?!/?[ap]|a\s[^>]>)[^>]+>
SUBSTITUIR POR:
LEAVE EMPTY
O elemento [ap] é uma classe de caracteres que corresponde a 'a' ou 'p'. Nas expressões regulares, o uso de uma classe de caracteres permite especificar um conjunto de caracteres possíveis para uma determinada posição no modelo.
No nosso caso, [ap] é usado na parte <(?!/?[ap]|a\s[^>]*>), onde verificamos as tags que começam com '<' e não são seguidas por ' a' ou 'p'. Ao usar [ap], indicamos que queremos que a próxima letra após '<' seja 'a' ou 'p'. Assim, qualquer tag que não comece com 'a' ou 'p' será incluída na correspondência de expressão regular e substituída.
Espero que esta explicação esclareça o uso do elemento [ap] na expressão regular proposta.