Exemplos Postgres Regex

Exemplos Postgres Regex

PostgreSQL é um popular banco de dados relacional de código aberto, com uma sólida reputação por sua confiabilidade, flexibilidade e suporte para padrões técnicos abertos. Ele suporta tipos de dados relacionais e não relacionais, tornando-o um dos bancos de dados relacionais mais compatíveis, estáveis ​​e maduros.

Neste guia, mergulharemos profundamente no uso de regex com o PostgreSQL.

Pré -requisitos:

Para executar as etapas demonstradas neste guia, você precisa dos seguintes componentes:

  • Um sistema Linux adequadamente configurado. Saiba mais sobre como criar uma máquina virtual do Ubuntu no VirtualBox.
  • Uma instalação postgreSQL adequada. Saiba mais sobre como instalar e configurar o PostgreSQL no Ubuntu.
  • Acesso a um não-raiz usuário com sudo Saiba mais sobre como gerenciar o privilégio do sudo usando sudoers.

Regex e PostgreSQL

Um curto prazo para expressão regular, Regex é uma série de texto que descreve um padrão para combinar, localizar e gerenciar o texto. É uma ferramenta versátil é suportada por muitas linguagens de programação (Perl, Python, Java, Kotlin, Scala, Go, C ++ etc.) e ferramentas (awk, sed, nginx, grep/egrep e muito mais).

O PostgreSQL usa as expressões regulares do POSIX que podem funcionar melhor do que consultas como COMO e IGUAL A operadores.

Banco de dados de demonstração

Para fins de demonstração, vamos trabalhar com um banco de dados dummy que é preenchido com entradas fictícias.

Conecte -se ao servidor local PostgreSQL como PostGres:

$ sudo -i -u pós -gres psql

A partir do shell postgreSql, crie um banco de dados dummy chamado Demo_DB:

$ Crie banco de dados Demo_db;

Mude para o novo banco de dados:

$ \ c Demo_db

Crie uma nova tabela:

Crie usuários de tabela (
Id Id Serial Primary Key,
Nome de texto não nulo,
Texto em e -mail);

Em seguida, preencha a tabela com alguns valores:

Inserir em usuários (nome, email) valores
('James', '[email protected] '),
('Mary', '[email protected] '),
('Robert', '[email protected] '),
('Patricia', '[email protected] '),
('Michael', '[email protected] '),
('David', '[email protected] '),
('Richard', '[email protected] '),
('Elizabeth', '[email protected] '),
('Lisa', '[email protected] '),
('Charles', '[email protected] ')
;

Verifique o conteúdo da tabela atualizada:

$ Select * de usuários;

Operadores de Match PostgreSQL

Aqui está uma pequena lista de vários operadores PostGresql Regex para correspondência de padrões:

  • ~: Um operador comum para combinar com uma expressão regular (sensível ao caso)
  • ~*: Corresponde à expressão regular fornecida (insensível ao caso)
  • !~: Filtra as ocorrências incomparáveis ​​(sensíveis ao caso)
  • !~*: Filtra as ocorrências incomparáveis ​​(insensível ao caso)

Exemplo 1: uma introdução

Vamos começar nossa jornada com a expressão regular do PostGresql com o exemplo a seguir:

$ Select * de usuários onde e -mail ~ '^.*$ ';

Aqui:

  • A expressão regular é aberta com o operador TILDE (~) seguido de um curinga (*). Ele seleciona todos os registros da tabela de usuários.
  • O operador "^" indica o início de uma string.
  • O ".”O operador é um operador curinga para um único caractere.
  • O operador "$" indica o fim de uma string.

Todos esses operadores juntos, “^.*$ ”, Denote uma string que começa com qualquer personagem e termina com qualquer string.

Exemplo 2: Sensível ao caso

Por padrão, o operador TILDE (~) é sensível ao maiúsculas de minúsculas. Podemos demonstrar esta propriedade usando as seguintes consultas:

$ SELECT * dos usuários onde email ~ 'Exemplo';
$ SELECT * dos usuários onde email ~ 'Exemplo';

Exemplo 3: Case insensível

Se quisermos executar as operações insensíveis ao caso, precisamos incluir o operador Asterisk (*) junto com o operador TILDE (~).

$ SELECT * dos usuários onde email ~ * 'Exemplo';
$ SELECT * dos usuários onde email ~ * 'Exemplo';

Como especificamos a interpretação insensível ao caso da expressão regular, ambas as consultas retornam a mesma saída.

Exemplo 4: Invert Match

Por padrão, expressões regulares correspondem ao padrão especificado.

Dê uma olhada na seguinte consulta:

$ Select * de usuários onde e -mail !~ 'exemplo';
$ Select * de usuários onde e -mail !~ 'Exemplo';

Aqui:

  • O comportamento padrão do operador "~" é corresponder ao padrão REGEX especificado.
  • Usando o “!~ ”Operador, ignoramos as instâncias em que o padrão corresponde.

Para executar a partida invertida insensível ao caso, use o “!~*”Operador em vez disso:

$ Select * de usuários onde e -mail !~* 'Exemplo';
$ Select * de usuários onde e -mail !~* 'Exemplo';

Exemplo 5: filtre os dados até o final da string

Execute a seguinte consulta:

$ SELECT * dos usuários onde email ~ * 'com $';

Aqui:

  • Nós filtramos as cordas do E-mail coluna baseada no final da cauda.
  • O operador "$" indica o fim da string.
  • O regex "com $" descreve que é correspondente a strings que têm "com" no final.

Exemplo 6: filtre os dados até o início da string

Veja a seguinte consulta:

$ SELECT * dos usuários onde email ~ * '^m';

Aqui:

  • Filtamos as cordas da coluna de e -mail com base em suas iniciais.
  • O operador "^" indica o início de uma string.
  • O regex "^m" descreve que é correspondente a strings que têm "m" no começo.

Exemplo 7: dados do tipo numérico

Também podemos usar a expressão regular para especificar as entradas de localização que contêm dígitos. A consulta a seguir demonstra perfeitamente:

$ Select * de usuários onde email ~ '[0-9]';

Nesta consulta, usamos o recurso de classe de caracteres da expressão regular. Basicamente, é uma maneira de atalho de representar certas classes de personagens. Por exemplo, [0-9] é uma representação da classe de caracteres de dígitos.

Para referência, aqui está uma pequena lista de várias classes regulares de personagens de expressão:

  • Letra maiúscula: [[:superior:]] ou [A-Z]
  • Letra minúscula: [[:mais baixo:]] ou [A-Z]
  • Alfabeto: [[:alfa:]] ou [A-ZA-Z]
  • Alfanumérico: [[: Alnum:]] ou [A-ZA-Z0-9]
  • Hexadecimal: [[: xdigit:]] ou [0-9A-FA-F]
  • ASCII: [[: ASCII:]]

Funções PostGresql Regex

Além da expressão regular do POSIX, o PostgreSQL também vem com várias funções específicas do Regex. Esta seção mostra essas funções com exemplos.

Regexp_replace ()

A sintaxe do Regexp_replace () A função é a seguinte:

$ Regexp_replace (, , ,)

Aqui:

  • fonte: Uma string onde a substituição ocorre.
  • padrão: Uma expressão regular POSIX para corresponder às sub-strings que devem ser substituídas.
  • substituição_string: Uma string para substituir o padrão regex corresponde.
  • bandeiras: É um componente opcional. Pode ser um ou mais personagens que influenciam o comportamento da função.

Vamos colocar a função em ação:

$ Select regexp_replace ('abc123xyz', '[a-za-z]', ',' g ');

Também podemos implantar o Regexp_replace () Para trabalhar em strings de entradas de banco de dados:

$ Select regexp_replace (email, '[0-9]', '*', 'g') dos usuários;

Conforme instruído, a função substitui todos os dígitos de todas as entradas sob a coluna de email por um asterisco (*).

Regexp_matches ()

Como o nome da função sugere, Regexp_matches () é usado para encontrar todas as instâncias do padrão em uma determinada string. A sintaxe da função é a seguinte:

$ Regexp_matches (, , );

Aqui:

  • fonte: Uma string em que a função procura o padrão fornecido.
  • padrão: Um padrão que é descrito na expressão regular do POSIX.
  • bandeiras: Pode ser um ou mais caracteres que influenciam o comportamento da função.

Confira o seguinte exemplo:

$ Select regexp_matches ('The Quick Brown Fox', 'the', 'g');

Observe que Regexp_matches () imprime a saída como um conjunto.

Em seguida, filtramos os dados do nosso banco de dados:

$ Select regexp_matches (email, '.+@(.*) $ ') Dos usuários;

A saída é um conjunto de todos os domínios exclusivos dos endereços de email.

Substring ()

O Substring () função retorna uma parte de uma determinada string. A substring é gerada com base nos parâmetros fornecidos.

A sintaxe do Substring () A função é a seguinte:

$ Substring (, , )

Aqui:

  • corda: A string que a função gera uma substring de.
  • posição inicial: Um valor inteiro positivo que especifica a posição para extrair a substring de. Se o valor for 0, a extração da substring começa no primeiro caractere da string.
  • comprimento: Um valor inteiro positivo que especifica o número de caracteres para extrair do start_position. Se não for fornecido, a função age como se o valor fosse o comprimento máximo da string especificada.

Os exemplos a seguir demonstram o comportamento do Substring () função perfeitamente:

$ Select Substring ('The Quick Brown Fox', 6, 9);
$ Select Substring ('The Quick Brown Fox', 6);

Também podemos utilizar essa função para manipular os dados extraídos do banco de dados:

$ SELECT Substring distinto (email de '.+@(.*) $ ') Dos usuários;

A saída imprime todos os domínios exclusivos dos endereços de email como uma lista de substringas.

Split_part ()

O Split_part () A função leva uma string e a divide em diferentes partes. A sintaxe da função é a seguinte:

$ Split_part (, , );

Aqui:

  • corda: A string que é dividida em múltiplas substâncias.
  • delimitador: Uma string usada como delimitador para dividir.
  • posição: A posição da peça para retornar. O valor começa de 1.

Confira a Split_part () função em ação:

$ Select split_part ('a, b, c, d, e', ',', 4);
$ Select split_part ('a, b, c, d, e', ',', 2);

No exemplo seguinte, usamos o Split_part () Para dividir os endereços de e -mail e pegar o domínio:

$ Select split_part (email, '@', 2) dos usuários;

Conclusão

Neste guia, fizemos um tutorial aprofundado sobre o uso da expressão regular para construir as instruções SQL e filtrar os dados no PostgreSQL. O uso de expressão regular permite muito mais flexibilidade do que os outros métodos estabelecidos. Por exemplo, usando o COMO operador.

Além da implementação básica, também demonstramos o uso do Regex em várias outras funções do PostgreSQL para melhorar bastante sua funcionalidade. De fato, você também pode implementar a expressão regular em funções definidas pelo usuário.

Interessado em aprender mais? A subcategoria PostgreSQL contém centenas de guias e tutoriais sobre os vários recursos do PostgreSQL.