Expressões regulares do MySQL
Nos capítulos anteriores, aprendemos que o MySQL pode executar correspondência difusa por meio de LIKE ...% .
O MySQL também suporta a correspondência de outras expressões regulares. O MySQL usa o operador REGEXP para correspondência de expressões regulares.
Se você conhece PHP ou Perl, é muito fácil, já que a correspondência de regex do MySQL é semelhante à desses scripts.
Os padrões regulares na tabela a seguir podem ser aplicados ao operador REGEXP.
modelo | descrever |
---|---|
^ | Corresponde ao início da string de entrada. ^ também corresponde à posição após '\n' ou '\r' se a propriedade Multiline do objeto RegExp estiver definida. |
$ | Corresponde ao final da string de entrada. Se a propriedade Multiline do objeto RegExp for definida, $ também corresponderá à posição antes de '\n' ou '\r'. |
. | Corresponde a qualquer caractere único, exceto "\n". Para corresponder a qualquer caractere, incluindo '\n', use um padrão como '[.\n]'. |
[...] | coleção de personagens. Corresponde a qualquer um dos caracteres contidos. Por exemplo, '[abc]' corresponderia a 'a' em "simples". |
[^...] | Conjunto de caracteres negativos. Corresponde a qualquer caractere não contido. Por exemplo, '[^abc]' corresponderia a 'p' em "simples". |
p1|p2|p3 | Corresponde a p1 ou p2 ou p3. Por exemplo, 'z|food' corresponderia a "z" ou "food". '(z|f)ood' corresponde a "zood" ou "food". |
* | Corresponde à subexpressão anterior zero ou mais vezes. Por exemplo, zo* corresponderia tanto a "z" quanto a "zoo". * é equivalente a {0,}. |
+ | Corresponde à subexpressão anterior uma ou mais vezes. Por exemplo, 'zo+' corresponderia a "zo" e "zoo", mas não a "z". + é equivalente a {1,}. |
{n} | n é um número inteiro não negativo. Corresponde exatamente n vezes. Por exemplo, 'o{2}' não corresponderia ao 'o' em "Bob", mas corresponderia a ambos os o's em "comida". |
{n,m} | Ambos m e n são inteiros não negativos, onde n <= m. Corresponde pelo menos n vezes e no máximo m vezes. |
exemplo
Depois de entender os requisitos regulares acima, podemos escrever instruções SQL com expressões regulares de acordo com nossas próprias necessidades. Abaixo listaremos vários pequenos exemplos (nome da tabela: person_tbl) para aprofundar nosso entendimento:
Encontre todos os dados que começam com 'st' no campo de nome:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
Encontre todos os dados que terminam com 'ok' no campo de nome:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
Encontre todos os dados que contenham a string 'mar' no campo de nome:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
Encontre todos os dados no campo de nome que começam com um caractere de vogal ou terminam com a string 'ok':
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';