last day (15 days later) » 

5:03 PM
1
Q: REGEXP de busca em json não funciona corretamente quando utilizado string com parênteses

Raphael CastroCriei uma expressão regular que faz uma pesquisa no JSON pelo nome e valor do campo, mas não funciona corretamente quando o valor buscado contém parênteses, como um DDD por exemplo, então neste caso a busca ignora os parênteses e traz todos os resultados que possuam em qualquer lugar o valor pesq...

 
Não seria melhor fazer parse desse JSON e iterar até encontrar um match?
 
Não, conto com mais de 10 mil itens do banco de dados, é inviável, além de que a busca não é o único filtro.
 
Estás a ir buscar esses dados à BD? nesse caso não podes extrair essa informação via BD?
 
Não, a plataforma trata-se de uma aplicação gerenciadora de leads, estes leads são recebidos via API em JSON de forma extremamente variada, e possui uma listagem a qual o cliente que gerencia, portanto esta minha dúvida é referente a um filtro de buscas.
 
Ok. Coloca um pedaço do JSON para termos material para testar. Podes mesmo colocar um exemplo que não funciona no -> regex101.com , gravar e colocar de novo aqui para vermos também.
 
5:03 PM
Atualizado, veja que o REGEX deveria está retornando somente o DDD (011), porém está retornando o valor 011 presente no número do telefone, ignorando os parênteses.
 
Raphael, nesse exemplo que colocas-te qual é o resultado final que queres obter? ainda não está claro para mim. Queres extrair de um dado JSON o indicativo com ou sem parêntesis? (nesse caso podes usar algo assim: regex101.com/r/fU1dV5/1) ou queres substituir conteudo dentro do JSON?
 
Sergio, o que eu preciso é que quando a string a ser pesquisada esteja com parênteses, estes parênteses não sejam ignorados e o resultado seja exatamente a string pesquisada.
 
oi @Raphael Castro
 
Oi, Sergio
 
Oi!
Podes fazer um reset e explica-me de novo o que queres fazer
nõ o que está a falhar
mas sim o que a app deve fazer
para eu perceber melhor
:)
tens JSON a entrar como string certo? e o que precisas fazer com ele?
e onde vai ser usado?
 
5:07 PM
Então, o aplicativo possui uma barra de buscas que funciona por campos, nesta barra o usuário seleciona o campo a ser pesquisado (Telefone, E-mail, Etc), e inclui um valor para a pesquisa.
 
ok, isso no lado do cliente. E fazes um AJAX para o servidor com essa string que o cliente pesquiza mais o tipo que é pesquizado?
 
A pesquisa é feita em um banco de dados onde estes valores estão em JSON, exemplo: {"nome":"Teste","telefone":"(55) 9999999"}
 
ok
esse telefone na BD está formatado?
ou pode ser "(55) 9999999", ou mesmo "55-9999999" ou mesmo "55 9999999"
 
Não, os tipos de valores são incertos.
Podem variar de todo tipo.
 
qual é o tipo de BD que tens?
 
5:10 PM
MySQL
 
ok, e quando envias o pedido para o servidor sabes se é telefone ou nome que é pesquizado certo?
ou queres fazer busca mais livre?
e procurar em todos os campos?
dessa string JSON
 
Não, não há filtros, o pedido ao servidor é feito para que seja encontrada uma string com a mesma procedencia.
 
ok, e o retorno que queres dar ao cliente é a informação que está no JSON que faz match certo? independentemente de haver um "-" no nome ou telefone
(por exemplo ^ )
 
O problema que estou enfrentando é: quando preciso pesquisar por algum valor que contém parênteses, como por exemplo (teste2), estes parênteses são ignorandos, e a busca traz como resultado qualquer string que possua "teste2" em seu meio, sem que tenha os caracteres "principais".
Por exemplo:
Se eu pesquisar (teste123) em um banco onde tenha os valores ABCDHIteste123ASS e (teste123)TESTESTE
Ambos os valores serão retornados
 
ok
e no BD as entradas são strings com JSONs certo?
 
5:14 PM
Porém o que eu preciso é que apenas "(teste123) ... " seja retornado.
Sim.
 
E porque não usas o MySQL para saber se existe essa substring numa outra string?
 
Não é possível, o que eu preciso é que seja pesquisado em JSON, pelo %nome do campo% + %string%
 
"Não é possível" porquê? não tens acesso à base de dados? só tens acesso a JSONs isolados?
 
Não Sergio, eu possuo sim acesso ao banco de dados, porém o que estou tratando aqui são dados de estrutura variavel.

Deixe-me explicar...
A minha aplicação captura e-mails enviados de dezenas de formulários diferentes, pois existe a possibilidade de que o usuário configure qualquer formulário para quer capturado.
Então a minha API identifica quais os campos são utilizados neste formulário e captura todos os e-mails enviados a partir deste.
Estes e-mails são salvos em JSON, no formato de {"nome_do_campo":"valor"}
 
ok, então se tens um dado JSON (string) o que precisas é de um resultado Booleano se esse JSON tem uma substring no valor de um campo específico.
 
5:22 PM
Não.
 
:)
?
ok, num primeiro passo precisas de um Booleano para filtrar entre outros JSON. E depois retornar para o cliente o JSON que deu match, certo?
 
O que eu preciso é que quando um valor qualquer seja pesquisado (Ex: @carro), o resultado seja exatamente esta string.
O problema é apenas que o meu REGEX está ignorando os carácteres especiais.
O que eu preciso é que o REGEX não ignore caracteres especiais e retorne o valor exatamente como foi pesquisado.
 
"retorne o valor exatamente como foi pesquisado"? não queres que retorne mais info sobre esse JSON?
 
Não, apenas o valor completo do campo desta pesquisa.
Exemplo:
Minha pesquisa: @carro
String: @carro compra e venda
JSON: {"campo1":"teste","campo2":"@carro compra e venda"}
Retorno: @carro compra e venda
 
ok, esse exemplo foi claro
 
5:27 PM
Só preciso que a STRING seja tratada da forma que foi pesquisada exatamente.
A mesma coisa serve para parênteses
 
mas queres também que só retorne se existir a substring @carro no campo2, e não se fôr no campo errado (campo1 por exemplo) certo?
 
Pesquisa: (11)
JSON: {"campo1":"(11) 0000-0000"}
Retorno: (11) 0000-0000
Exatamente!!
 
ok, vou fazer um exemplo e coloco aqui daqui a 5 min
 
Ah, ops.
Desculpe.
 
?
 
5:29 PM
Na verdade pode ter definição de campo.
A substring retornada deve ser de qualquer campo onde for encontrada
Porém, deve está exatamente entre ":"%s"
Sergio, para facilitar...
Você pode esquecer o valor em JSON.
O que eu preciso, simplesmente, é de um REGEX que não ignore os parênteses em uma pesquisa.
Ex: "([a-A()_^"]*)%string([a-A()_^"]*)"
Onde string é = "(teste)"
*Desculpe, meu conhecimento de REGEX é minimo.
 
6:02 PM
@RaphaelCastro estás por aí?
 
 
3 hours later…
9:09 PM
@RaphaelCastro
 

last day (15 days later) »