Expressões regulares MYSQL (REGEXP) com sintaxe & Exemplos

Anonim

O que são expressões regulares?

Expressões regulares ajudam a pesquisar dados que correspondem a critérios complexos. Vimos curingas no tutorial anterior. Se você já trabalhou com curingas antes, pode estar se perguntando por que aprender expressões regulares quando pode obter resultados semelhantes usando os curingas. Porque, em comparação com curingas, as expressões regulares nos permitem pesquisar dados que correspondam a critérios ainda mais complexos.

Sintaxe básica

A sintaxe básica para uma expressão regular é a seguinte

SELECT statements… WHERE fieldname REGEXP 'pattern';

AQUI -

  • "Instruções SELECT ..." é a instrução SELECT padrão
  • "WHERE fieldname" é o nome da coluna na qual a expressão regular deve ser executada.
  • "REGEXP 'padrão'" REGEXP é o operador de expressão regular e 'padrão' representa o padrão a ser correspondido por REGEXP. RLIKE é sinônimo de REGEXP e obtém os mesmos resultados que REGEXP. Para evitar confundi-lo com o operador LIKE, é melhor usar REGEXP .

Vejamos agora um exemplo prático

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

A consulta acima procura todos os títulos de filmes que contenham o código da palavra. Não importa se o "código" está no início, meio ou final do título. Desde que esteja contido no título, será considerado.

Suponhamos que desejemos pesquisar filmes que comecem com a, b, c ou d, seguidos por qualquer número de outros caracteres, como faríamos para conseguir isso. Podemos usar uma expressão regular junto com os metacaracteres para alcançar os resultados desejados.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Executar o script acima no ambiente de trabalho MySQL no myflixdb nos dá os seguintes resultados.

 
movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Vamos agora dar uma olhada em nossa expressão regular responsável pelo resultado acima.

'[abcd]' o acento circunflexo (^) significa que a correspondência de padrão deve ser aplicada no início e a charlist [abcd] significa que apenas títulos de filmes que começam com a, b, c ou d são retornados em nosso conjunto de resultados.

Vamos modificar nosso script acima e usar o NOT charlist e ver quais resultados obteremos após executar nossa consulta.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Executar o script acima no ambiente de trabalho MySQL no myflixdb nos dá os seguintes resultados.

 
movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Vamos agora dar uma olhada em nossa expressão regular responsável pelos resultados acima.

'[abcd]' o acento circunflexo (^) significa que a correspondência de padrão deve ser aplicada no início e a charlist [abcd] significa que os títulos de filmes começando com qualquer um dos caracteres incluídos são excluídos do conjunto de resultados.

Metacaracteres de expressão regular

O que vimos no exemplo acima é a forma mais simples de uma expressão regular. Vejamos agora as correspondências de padrão de expressão regular mais avançadas. Suponha que desejamos pesquisar títulos de filmes que comecem com o padrão "código" usando apenas uma expressão regular, como faríamos isso? A resposta é metacaracteres. Eles nos permitem ajustar nossos resultados de pesquisa de padrão usando expressões regulares.

Caracteres Descrição Exemplo
* O metacaractere asterisco (*) é usado para corresponder a zero (0) ou mais instâncias das strings que o precedem SELECT * FROM movies WHERE title REGEXP 'da *'; dará todos os filmes contendo personagens "da". Por exemplo, Código Da Vinci, Garotinhas do papai.
+ O metacaractere mais (+) é usado para corresponder a uma ou mais instâncias de strings que o precedem. SELECT * FROM `movies` ONDE` title` REGEXP 'mon +'; fornecerá todos os filmes contendo personagens "mon". Por exemplo, Anjos e Demônios.
? O metacaractere question (?) É usado para corresponder a zero (0) ou uma instância das strings que o precedem. SELECT * FROM `categorias` ONDE` category_name` REGEXP 'com?'; fornecerá todas as categorias que contêm string com. Por exemplo, comédia, comédia romântica.
. O metacaractere ponto (.) É usado para corresponder a qualquer caractere único, exceto para uma nova linha. SELECT * FROM movies WHERE `year_released` REGEXP '200.'; dará todos os filmes lançados nos anos, começando com os caracteres "200" seguidos por qualquer caractere único. Por exemplo, 2005,2007,2008 etc.
[abc] A charlist [abc] é usada para corresponder a qualquer um dos caracteres incluídos. SELECT * FROM `movies` ONDE` title` REGEXP '[vwxyz]'; fornecerá todos os filmes contendo qualquer caractere único em "vwxyz". Por exemplo, X-Men, Código Da Vinci, etc.
[abc] A charlist [abc] é usada para corresponder a quaisquer caracteres, exceto os incluídos. SELECIONE * DE `filmes` ONDE` título` REGEXP '[vwxyz]'; dará todos os filmes contendo personagens diferentes daqueles em "vwxyz".
[AZ] O [AZ] é usado para corresponder a qualquer letra maiúscula. SELECT * FROM `membros` WHERE` postal_address` REGEXP '[AZ]'; dará a todos os membros que possuem endereço postal contendo qualquer caractere de A a Z ... Por exemplo, Janet Jones com número de membro 1.
[az] O [az] é usado para corresponder a qualquer letra minúscula SELECT * FROM `members` WHERE` postal_address` REGEXP '[az]'; fornecerá todos os membros que possuem endereços postais contendo qualquer caractere de a a z ... Por exemplo, Janet Jones com o número de membro 1.
[0-9] O [0-9] é usado para corresponder a qualquer dígito de 0 a 9. SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' dará a todos os membros que enviaram números de contato contendo caracteres "[0-9]". Por exemplo, Robert Phil.
^ O circunflexo (^) é usado para iniciar a correspondência no início. SELECIONE * DE `filmes` ONDE` título` REGEXP '[cd]'; dá todos os filmes com o título começando com qualquer um dos personagens em "cd". Por exemplo, Code Name Black, Daddy's Little Girls e Da Vinci Code.
| A barra vertical (|) é usada para isolar alternativas. SELECIONE * DE `filmes` ONDE` título` REGEXP '[cd] | [u]'; dá todos os filmes com o título começando com qualquer um dos personagens em "cd" ou "u". Por exemplo, Code Name Black, Daddy's Little Girl, Da Vinci Code e Underworld - Awakening.
[[: <:]] O [[: <:]] corresponde ao início das palavras. SELECIONE * DE `filmes` ONDE` título` REGEXP '[[: <:]] para'; dá todos os filmes com títulos começando com os personagens. Por exemplo: Esquecendo Sarah Marshal.
[[:>:]] O [[:>:]] corresponde ao final das palavras. SELECT * FROM `movies` ONDE` title` REGEXP 'ack [[:>:]]'; fornece todos os filmes com títulos terminando com os caracteres "ack". Por exemplo, Code Name Black.
[:aula:] O [: class:] corresponde a uma classe de caractere, ou seja, [: alpha:] para corresponder às letras, [: space:] para corresponder ao espaço em branco, [: punct:] corresponde às pontuações e [: upper:] para as letras das classes superiores. SELECT * FROM `movies` ONDE` title` REGEXP '[: alpha:]'; fornece todos os filmes com títulos que contêm apenas letras. Por exemplo, Forgetting Sarah Marshal, X-Men etc. Filme como Piratas do Caribe 4 será omitido por esta consulta.

A barra invertida (\) é usada como um caractere de escape. Se quisermos usá-lo como parte do padrão em uma expressão regular, devemos usar barras invertidas duplas (\\)

Resumo

  • As expressões regulares fornecem uma correspondência de padrões poderosa e flexível que pode nos ajudar a implementar utilitários de pesquisa avançados para nossos sistemas de banco de dados.
  • REGEXP é o operador usado ao realizar correspondências de padrão de expressão regular. RLIKE é o sinônimo
  • As expressões regulares suportam vários metacaracteres que permitem mais flexibilidade e controle ao realizar correspondências de padrões.
  • A barra invertida é usada como um caractere de escape em expressões regulares. Só é considerado na correspondência de padrão se barras invertidas duplas forem usadas.
  • As expressões regulares não diferenciam maiúsculas de minúsculas.