[RESOLVIDO] Função preg_replace com regex não quer funcionar

Olá pessoal.
Tenho um arquivo texto formato “txt”
Ao abrir ele no Notepad++ está em formato ANSI:
replace_001
Fiz o teste do meu regex e ele esta encontrando o match:


No inicio do meu PHP dentro da blank tenho as seguintes linhas:
replace_003
E carrego o meu arquivo TXT em memória e aplico o comando preg_replace:
replace_004
Acontece que a substituição não ocorre.
O projeto todo foi feito em UTF-8 nas geração das APP’s.
Ao dar echo no arquivo TXT em tela as acentuações não ficam corretas:
replace_005
Então setei nas configurações da APP blank UTF-8 e não ficou correto o arquivo, só deu certo setando:
replace_006
ficando assim minha configuração atual.
replace_007

Passe utf8_encode antes do refez.

replace_008
Não deu certo ainda.

Pessoal deu certo aqui.
Com os ajustes propostos pelo nosso colega Fagner Queiroz do grupo no Telegram.
preg_replace("/[^a-zA-Z0-9-áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ]/", " ", $texto_baguncado);
Fiz isso antes de eu aplicar o meu regex.
Obrigado a todos.

Estou reabrindo o tópico porque resolveu parcialmente.
Na ferramenta online onde monto o regex com o texto foram encontradas 6 ocorrências mas ao rodar o php para substituir simplesmente não faz a substituição.

replace_012

Dica crie e execute este código como teste em um arquivo .php avulso sem ser dentro do SC,
porque o SC altera durante a geração os códigos [] {}.

<html>
 <head>
	<meta http-equiv=Content-Type content="text/html; charset=utf-8">
	<title>Teste PHP</title>
 </head>
 <body lang=PT-BR>
 <?php
 
 echo "<p>Olá Mundo!!</p>";
 
 ?>
 </body>
</html>

Se funcionar em um arquivo avulso, converta a expressão regex para Code Base64 e depois
use no projeto.

// https://www.base64decode.org/

$_expressao="
LyhcRGlzcG9uaWJpbGl6YcOnYW86XHMuKj9FZGnDp8Ojb1xzXGR7NH1cc1xkKykvIA==
;

$_expressao=base64_decode($_expressao);
$_trocar_por='teste';

$_string=reg_replace($_expressao, $_trocar_por, $string);

Estou executando o código fora do SC.
E não funciona.
Percebi que quando vou procurar por petição por exemplo ele não acha e se eu retirar “ção” ele acha “peti”.
Então deve ser problema de enconding da página.
Mas mesmo assim vou testar sua dica.

Não deu certo.
$patterns =base64_decode( ‘/\s{1,}Publicação.*\d{4}\s{1,}\d{1,}/m’);

Voltei para:
$patterns = ‘/\s{1,}Publica.*\d{4}\s{1,}\d{1,}/m’;

Ok mais mesmo sem usar o base64_encode/decode, você fez uma arquivo
avulso .php e testou o seu $patterns lá manualmente e deu certo? para depois poder
codificar ele em base64 e usar no Scriptcase.

E mesmo no avulso se seu $patterns não funcionar ele está com erro de ‘lógica’ regex.

Não estou usando SC.
txt_003
Tudo está sendo feito fora o SC.
Veja trecho do meu arquivo .txt:

    $patterns = '/\s{1,}Publica.*\d{4}\s{1,}\d{1,}/m';//ELE ACHA
$str = preg_replace($patterns,"###xxppp###",$str);

=============================
$patterns = ‘/\s{1,}Publicação.*\d{4}\s{1,}\d{1,}/m’;//NÃO ACHA
$str = preg_replace($patterns,"###xxppp###",$str);

Caso ainda não tenha conseguido me passe um link com o arquivo .txt original que você baixa,
sem alterações e escreva e detalha que palavra / situação você quer encontrar e trocar.

Não passe o $patterns apenas descreva com palavras a situação.

Ai crio uma nova $patterns para php com minha ferramenta e faço o teste em uma rotina avulsa .php
no wwwroot do meu scriptcase e depois colo aqui, mas preciso do .txt original para analisar o texto
as vezes pode conter além do ANSI, CR, LF, FF.

Jóia Jailton eu fico grato pela ajuda mas já deu certo com as dicas dos colegas a respeito UTF.
Consegui passar por esse problema.
A dica é:

e dentro do php header('Content-Type: text/html; charset=UTF-8'); Com isso o arquivo txt novo gerado ficou em UTF-8 Bom fiz vários testes e várias limpeza do arquivo texto já que ele é um arquivo de 15mb de texto puro. E agora ele resolveu não aceitar minha regex em um determinado ponto. $result = preg_match_all('/(^##iniP##\s\d{7}-\d{2,}.\d{4,}.\d{1}.\d{2}.\d{4}(.*)(\n.+)*[A-T]\)$)/u', $str, $matches, PREG_SET_ORDER, 0); Essa regex funciona no site regex101 ele até gera o código php para que você possa importar ele. Mas não encontra os match no meu ambiente local. Talvez tenha que escapar algum caractere dessa regex.
1 Curtida

Gostei da ferramenta parece ser muito útil na hora de montar regex.
Tem como enviar um arquivo txt para vc em privado para teste?

Sim te passei a MP com o e-mail, ai além de passar o arquivo .txt original,
me passe com palavras explicando o que deseja encontrar para fazer as trocas,
não passe o $patterns.

Certo enviado.
Obrigado.

Ok pode testar, só criar um arquivo .php avulso no wwwroot do seu Scriptcase e executar.

Depois confere no arquivo .txt gerado final se esta tudo ok, ai depois só adaptar no seu projeto.

<html>
 <head>
    <meta http-equiv=Content-Type content="text/html; charset=utf-8">
    <title>Teste PHP</title>
 </head>
 <body lang=PT-BR>
 <?php
setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
date_default_timezone_set('America/Sao_Paulo');

$_Arquivo = fopen("Texto_Regex.txt", "r");

$_Texto = null;

$_Linha = - 1;
$_Linha_Corte = 0;

$_FF = chr(12);
$_CR = chr(13);
$_LF = chr(10);

while (!feof($_Arquivo)) {

    $_Linha++;

    $_Texto = utf8_encode(fgets($_Arquivo)); // Transforma ANSI Original em UTF8.
    if (preg_match('/(Publicação Oficial do Tribunal de Justiça do Estado de)/i', $_Texto)) {
        $_Linha_Corte = $_Linha - 1;
    }

    if ($_Linha_Corte > 0 and $_Linha == $_Linha_Corte + 4) {
        $_Linha = $_Linha_Corte;
        $_Linha_Corte = 0;
    }

    $_Texto_Geral[$_Linha] = $_Texto;

} // while(! feof($_Arquivo))
fclose($_Arquivo);

// Texto Final para ser Gravado em Novo Arquivo já UTF8.
$_Arquivo = fopen("nome_do_arquivo.txt", "wb");
for ($_x = 0; $_x <= count($_Texto_Geral) - 1; $_x++) {
    // Remove o SUMÁRIO do FINAL
    if (preg_match('/(                                                               SUMÁRIO)/i', $_Texto_Geral[$_x])) {
        break;
    }
    fwrite($_Arquivo, $_Texto_Geral[$_x]);
    // echo $_Texto_Geral[$_x]."<BR>";
} // for ($_x = 0
fclose($_Arquivo);

?>
 </body>
</html>

Joia vou testar aqui.
Obrigado.

1 Curtida

Joia Jailton.
Funcionou perfeitamente.
Muito obrigado pela ajuda.

1 Curtida

Depois lembra de colocar o Post como ‘[RESOLVIDO]’