-
Contagem de Conteúdo
4 -
Ingressou
-
Última visita
Tipo de Conteúdo
Perfis
Fóruns
Blogs
Calendário
Downloads
Postagens postado por Gilmar Piccin
-
-
Ola Carlos Antonio tente da seguinte maneira utilizando chr(13)
procedure HeaderBeforePrint; begin RichText1.seltext := 'meu texto' + chr(13) + 'texto segunda linha' end;
- 2
-
O objetivo deste artigo é apresentar a estrutura de um regex e aprofundar em cada aspecto e que possa lhe servir como um guia podendo sempre consultar para compreender um regex ou cria-lo do zero.Servindo como um complemento ao artigo:
Para facilitar e organizar nosso pensamento é importante que definamos alguns passos:
1º Precisamos definir um alvo (Target) é o nossa fonte de dados bruta;
2º Definir qual a nossa necessidade (ex: extrair uma data);
3º Aplicarmos o padrão (pattern) baseado na nossa necessidade;
Exemplo:
Target = 1233P86949A9822R1A165B568E22N35S
Necessidade = descriptografar esse conteúdo desconsiderando os dígitos
Pattern = [^\d]
Resultado = 8 matchs P | A | R | A | B | E | N | S
Para testar essa solução podemos utilizar https://www.regextester.com/
Agora vamos nos aprofundar em cada aspecto das expressões regulares para entender como chegar nesse resultado
Quantifier
Usamos quantifier para dizer quantas vezes determina expressão deve aparecer em sequência
? - zero ou uma vez. * - zero ou mais vezes. + - uma ou mais vezes. {n} - exatamente n vezes. {n,} - no mínimo n vezes. {n,m}- no mínimo n vezes, no máximo m vezes. . - o "ponto" significa qualquer char { e }- as chaves servem para definir uma quantidade de caracteres específicas que é desejado encontrar. Por exemplo: a{3} - letra a 3 vezes. \d* - um dígito zero ou mais vezes. Se quisermos procurar pelo . ou * literalmente (sem significado especial), devemos utilizar o caractere \ \ - podemos escapar meta-chars, por exemplo \.. | - “Pipe” é usado como operador lógico OR
Classe de caractere
Definimos classes de caracteres dentro de [ ] existem várias classes prontas que nos auxiliam
[A-Z] - significa de A até Z, sempre maiúscula. [a-z] - significa de a até z, sempre minúscula. [A-Za-z] - significa A-Z ou a-z. [abc] - significa a, b ou c. [123] - significa 1,2 ou 3 \d - (minúsculo) significa todos os dígitos e é atalho para [0-9] \w - (minúsculo) significa word char e é um atalho para [A-Za-z0-9_]. \s - significa whitespace normalmente é um atalho para [ \t\r\n\f] onde: O primeiro caractere é um espaço branco. \t - é um tab. \r - é carriage return. \n - é newline. \f - é form feed.
Obs: as classes \w ou [A-Za-z] não retornam caracteres com acento, para tal é necessário adicionar os caracteres desejados exemplo:
Target = 123JoãoCaçula4567
Pattern = [A-Za-zãç]
isso serve para qualquer caractere com acento
Uma maneira mais simples para resolver esse problema é usar a classe [À-ü]
Pattern = [A-Za-zÀ-ü]
Combinando classes com quantifier
Podemos combinar classes com quantifier para especificar cada vez mais nossa regex
[.-]* - ponto ou hífen zero, uma ou mais vezes. [.-]{1} - ponto ou hífen uma vez. [.-]? - ponto ou hífen zero ou uma vez.
Âncoras
Quando precisamos que encontrar determinada informação delimitando uma parte da informação podemos usar as âncoras:
\b - (minúsculo) é uma âncora que seleciona um word boundary, isso é o início ou fim da palavra. ^ - Garantir que nada vem antes. $ - Garantir que nada vem depois. \B - (B maiúsculo) non-word-boundary comportamento inverso a sílaba alvo deve aparecer dentro de uma palavra, nunca no início ou fim.
Exemplos de uso do \B :
Target = 123aaa456
Pattern = \Baaa\B
ou usando quantifier
\Ba{3}\B
Grupos
Quando queremos retornar alguma parte dentro da nossa expressão podemos colocar dentro de grupos para isso usamos ( )
() - Declarar um grupo ?: - Non-Capturing group, não retornar deste grupo
Exemplo remover a palavra teste de uma frase
Target = este é um teste de grupo
Pattern = (?:teste\s+)
Backreferences
Quando queremos que um comportamento seja replicado dentro de um grupo podemos usar a sua referência invés de duplicar o mesmo padrão, para isso usa-se um \ seguido pelo número do grupo, começando com 1
Exemplo:
Suponhamos que temos que extrair o conteúdo de dentro de uma tag de um arquivo xml
<tag1 id="teste">teste</tag1> <tag2 id="teste">teste2</tag2> <tag1 id="teste">teste3</tag2> - não deve capturar
Podemos solucionar da seguinte forma:
Pattern = <(tag1|tag2).+?>([\w]+)</(tag1|tag2)>
ou então podemos usar a referencia desse grupo:
Pattern = <(tag1|tag2).+?>([\w]+)<\/\1>
Negação
As vezes é mais vantajoso selecionarmos a informação que não queremos e para isso podemos utilizar
\W - (maiúsculo) é a non-word char , ou seja tudo que não é um word char. \W é um atalho para [^\w]. \D - (maiúsculo) é um non-digit, sendo \D um atalho para [^\d]
Repare também que não usamos a meta-char ^ como âncora pois aparece dentro de uma classe [^\d] seu significado nesta situação é de negação
Exemplos comunsValidar CPF
Pattern= (\d{3})[.]?(\d{3})[.]?(\d{3})[-]?(\d{2})
Validar CNPJ
Pattern = (\d{2})[.]?(\d{3})[.]?(\d{3})[/]?(\d{4})[-]?(\d{2})
Validar CPF e CNPJ ao mesmo tempo
Pattern = ((\d{2})[.]?(\d{3})[.]?(\d{3})[/]?(\d{4})[-]?(\d{2}))|((\d{3})[.]?(\d{3})[.]?(\d{3})[-]?(\d{2}))
Validar Inscrição Estadual
Pattern = (?=\d)(?![\d/\-.]*[/\-.]{2})[\d/\-.]{1,16}\d
Validar CEP
Pattern= (\d{2}[.]?\d{3})[-]?(\d{3})
- 1
- 2
-
Em 14/01/2022 at 10:43, Furjala disse:
Olá,
Estou precisando criar uma expressão onde não permita 0 a esquerda e que limite de 1 a 4 ou 9 números.Eu consegui criar ambas, porém separadas e não sei como seria para unificar as 2 regras.
^([0-9]{1}|[1-9]{2}||[1-9]{3}||[1-9]{4}|[1-9]{9})$ Aqui estou limitando os caracteres porém não consegui remover o 0.
^(0|[1-9][0-9]*)$ Aqui estou limitando o 0 a esquerda mas não consegui inserir limite de caracteres.
Alguém poderia me auxiliar?
Ola Furjala, tudo certo?
Se entendi corretamente, você precisa que retorne um match sempre que atender as condições citadasse esse for o caso, você pode usar a seguinte expressão:
^[1-9]{1}(\d{3}|\d{8})$
Vamos entender por partes:
-
Não permitir zero a esquerda:
- [1-9]{1} - criar uma classe de dígitos de 1 a 9 e usar o quantifier para pegar exatamente 1 caractere
-
Limitar no máximo 4 ou 9 dígitos
- \d{3} - usar \d é um atalho para [0-9] e usamos o quantifier {3} para selecionar exatamente 3 caracteres pois o 1º digito nós já resolvemos
- \d{8} - apenas dígitos e selecionar exatamente 8 caracteres (trazer apenas os restantes)
- | - Significa condicional para o OR
- () - Agrupamento para nossa condição
- ^ - Ancora para garantir que nada vem antes
- $ - Ancora para garantir que nada vem depois
Espero ter ajudado
-
Não permitir zero a esquerda:
Como funciona na prática o controle de instalação/atualização de versão de vários componentes com apenas um contrato? (Suite de Componentes)
em Desenvolvimento de Software
Postado
Olá, pessoal!
Quero compartilhar com vocês uma novidade: o Gerenciador de Suíte de Componentes da Tecnospeed!
Esse produto foi criado para tornar a instalação e atualização de componentes uma tarefa simples e eficiente. Vamos mostrar como você pode usá-lo para melhorar a gestão dos seus produtos. 😊
O que é o Gerenciador de Suíte de Componentes?
O Gerenciador de Suíte de Componentes é uma ferramenta dedicada a simplificar o processo de instalação e atualização de componentes. Com ele, você pode:
Quem Pode Usar o Gerenciador de Suíte de Componentes?
Este recurso está disponível para clientes que possuem o módulo "Suíte Componentes TecnoSpeed".
contrate
Agora, vamos mergulhar no guia passo a passo para aproveitar ao máximo esse recurso:
Faça o download do executável do Gerenciador de Suíte de Componentes na Central do Cliente.
Instalação - Agente Suíte de Componente
Aplicação modo desenvolvedor: nesse modo o Agente será voltado ao desenvolvedor cliente da Tecnospeed, onde de modo visual permitirá que os componentes sejam instalados, atualizados, etc, receberá alertas de atualizações disponíveis, dentre outras funcionalidades.
Aplicação modo cliente: nesse modo o Agente será voltado para o cliente final do produto desenvolvido. Esse modo funciona inteiramente de forma programática, sem interface visual, e permite realizar o download e instalação das dependências dos componentes da Tecnospeed.
Modo Desenvolvedor:
Nessa tela é possível realizar as seguintes ações:
Modo Cliente Final:
Exemplo de uso (Delphi):
Método "AtualizarVersao" Por Produto:
métodos de atualização automática disponíveis para produto específico:
Agora, você tem um guia para usar o Gerenciador de Suíte de Componentes da Tecnospeed. Não hesite em fazer perguntas ou compartilhar suas experiências para ajudar a comunidade! 😄