Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Galera,
Estou há alguns dias batendo cabeça com uma bendita expressão regular, como não sou muito bom com regex, será que alguém poderia me dar uma luz?
Vou explicar o cenário, estou importando um arquivo .docx no sistema, este arquivo posteriormente é transformado em pdf para impressões automáticas (tipo mala direta), até aí tudo funciona muito bem.
Neste arquivo podem ser utilizadas algumas variáveis, que defini como @NomeDaVariavel@, estas serão substituídas por dados do banco de dados.
É aí que está o problema, se eu abro o word (ou writer) digito algumas variáveis, mando salvar e testo funciona tudo certinho. Porém se eu importo um arquivo que já existia com alguma formatação, ele não substitui, o motivo, as formatações do word fazem aparecer uma porrada de tags entre os "@" e os "NomeDaVariavel", e isso faz com que o str_replace não funcione.
Ccheguei a um regex para usar com o preg_replace que consegue limpar estas tags , mas acontece quase sempre também de ter uma bendita de uma quebra de linha, tab, espaço etc. E é aí que empaquei, sei que a quebra de linha no regex é representado por \n. mas não consegui chegar a uma regex que satisfaça.
Abaixo tem um trecho do html gerado para facilitar, ou dificultar:
CLÁUSULA TERCEIRA: a contraprestação pecuniária aos serviços educacionais que serão prestados pela CONTRATADA, estipulados na cláusula anterior, constitui-se na anuidade escolar do Ano Letivo de </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">2014</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">, no valor total de </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">R$ </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">ValorTotal</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@ </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">(</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">ValorExtenso</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">)</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">, a ser paga integralmente pelo CONTRATANTE, na seguinte forma: </span></span></p><p class="Normal-P" style="
margin-bottom:0pt;
line-height:24pt;
text-align:justify;text-justify:inter-ideograph;direction:ltr;unicode-bidi:normal;"><span class="Normal-H"><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
"></span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
"> Parágrafo Primeiro - a anuidade escolar, no valor de </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">R$</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
"> </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">ValorTotal</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
"> será parcelada em </span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@QtdParcelas</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
">@</span><span class="-H" style="
font-family:Book Antiqua;
font-size:12pt;
"> </span>
Coloquei em negrito algumas variáveis, quem tiver um tempinho pra dar uma olhada.
Obrigado desde já,
[]s.
Cara,
Obrigado pela ajuda... mas ontem a caminho de casa tive um estalo e comecei a rabiscar uma expressão no papel... quando cheguei fui testar e num é que funcionou... tive que fazer uns ajustes, mas funcionou do jeito que preciso, também não sei se cheguei da melhor forma...
Mas de qualquer forma vou deixá-la aqui, caso alguém precise.
@(\t)(\n)(\t)(<[^>]>)(\t)(\n)(\t)NomeDaVariavel(\t)(\n)(\t)(<[^>]>)(\t)(\n)(\t)@
Obrigado
Dê uma estudada :seta: Expressões Regulares - Guia de Consulta Rápida
Para o seu problema com espaços, tabs, novas linhas e etc...
[ \t] :seta: espaço em branco e TAB
[ \t\n\r\f\v] :seta: caracteres brancos