Eu testei isso no jEdit (que também é escrito em Java como o Netbeans, mas eu não tenho acesso ao Netbeans no momento). Tente isto para o padrão regex:
(?<=<section>)(\s*)<p><b>([^<]+)</b></p>
com isso usado como substituto:
$1<h2>$2</h2>
O padrão regex diz "corresponde a uma sequência que é precedida por <section>
e começa com qualquer quantidade de espaço em branco (que é armazenado como grupo de captura 1) e contém <p><b>
seguido por pelo menos um caractere que não é <
(e armazena esses caracteres como grupo de captura 2) e termina com </b></p>
".
O padrão de substituição diz apenas "comece com o espaço em branco do grupo de captura 1 e, em seguida, imprima <h2>
e depois os caracteres do grupo de captura 2 que foram encontrados dentro do elemento <b>
e, em seguida, imprima </h2>
." Capturar e gerar o espaço em branco significa que o novo elemento h2 começará com as mesmas novas linhas e guias do elemento p, portanto, qualquer formatação bonita não será arruinada pela alteração.
Tenha em mente que o regex não tem como saber onde ele está em relação à estrutura do DOM, portanto não é possível saber se é correto usar h1, h2, h3, h4 e assim por diante. Mas se você precisar apenas de <h2>
, experimente.
(Na verdade, se você estiver usando HTML5, poderá iniciar cada novo elemento de seção com um elemento <h1>
ou qualquer outro número inicial, e um navegador compatível será necessário para lidar com os níveis de cabeçalho automaticamente.)