No MariaDB, o
REGEXP_SUBSTR()
A função retorna a substring que corresponde ao padrão de expressão regular fornecido. Se não houver correspondência (ou seja, a string de entrada não contém a substring), o resultado é uma string vazia.
Sintaxe
A sintaxe fica assim:
REGEXP_SUBSTR(subject,pattern)
Onde
subject
é a string de entrada e o pattern
é o padrão de expressão regular para a substring. Observe que, no momento da escrita, a versão do MariaDB de
REGEXP_SUBSTR()
aceita menos argumentos que o REGEXP_SUBSTR()
do MySQL . A versão do MySQL permite que você forneça argumentos para a posição inicial da busca, qual ocorrência procurar, bem como uma forma de refinar a expressão regular. Exemplo
Segue um exemplo básico:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
Resultado:
+--------------------------------------------+| REGEXP_SUBSTR('Tailândia e Laos', 'l.nd') |+------------------------------------------------ ----------+| terra |+--------------------------------------------+
Nesse caso, há uma correspondência e a substring é retornada.
Várias correspondências
Por padrão, se houver várias correspondências na string, a primeira será retornada:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Resultado:
+----------------------------------------+| REGEXP_SUBSTR('Emprestar por terreno', 'l.nd') |+------------------------------------------------ ------+| Emprestar |+----------------------------------------+Sem correspondência
Aqui está um exemplo em que não há correspondência:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Resultado:
+--------------------------------------+| REGEXP_SUBSTR('Emprestar por terreno', '^C') |+----------------------------------- ---+| |+-------------------------------------------------+
Não há correspondência, então o resultado é uma string vazia.
Sensibilidade de maiúsculas e minúsculas
OREGEXP_SUBSTR()
A função segue as regras de diferenciação de maiúsculas e minúsculas da ordenação efetiva. A correspondência é realizada sem distinção entre maiúsculas e minúsculas para ordenações que não diferenciam maiúsculas de minúsculas e com distinção entre maiúsculas e minúsculas para ordenações que diferenciam maiúsculas de minúsculas e para dados binários.
Aqui está um exemplo:
SELECT REGEXP_SUBSTR('My Cats', 'c.t') AS "My Default", REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive", REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive";
Resultado:
+------------+------------------+-------------- --+| Meu padrão | Insensível a maiúsculas e minúsculas | Diferenciar maiúsculas de minúsculas |+------------+------------------+-------------- --+| Gato | Gato | |+------------+------------------+---------------- +
Meu agrupamento padrão não diferencia maiúsculas de minúsculas. As outras duas strings foram forçadas a uma ordenação sem distinção entre maiúsculas e minúsculas e ordenação com distinção entre maiúsculas e minúsculas, respectivamente.
Fornecendo umBINARY
string também diferencia maiúsculas de minúsculas (veja abaixo).
Strings binárias
Passando umBINARY
string também afeta a distinção entre maiúsculas e minúsculas. ComBINARY
strings, um caractere maiúsculo é diferente de sua contraparte minúscula:
Exemplo:
SELECT REGEXP_SUBSTR('My Cats', 'c.t') AS "Character", REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Resultado:
+-----------+--------+| Personagem | Binário |+-----------+--------+| Gato | |+-----------+--------+
Aqui está o que acontece se mudarmos o caso:
SELECT REGEXP_SUBSTR('My Cats', 'C.t') AS "Character", REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Resultado:
+-----------+--------+| Personagem | Binário |+-----------+--------+| Gato | Gato |+-----------+--------+Argumentos nulos
Passandonull
pois qualquer argumento resulta emnull
:
SELECT REGEXP_SUBSTR(null, 'c.t') AS "1", REGEXP_SUBSTR('Cat', null) AS "2", REGEXP_SUBSTR(null, null) AS "3";
Resultado:
+------+------+------+| 1 | 2 | 3 |+------+------+------+| NULO | NULO | NULL |+------+------+------+Número errado de argumentos
Passar o número errado de argumentos ou nenhum argumento resulta em um erro:
SELECT REGEXP_SUBSTR('Cat');
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'REGEXP_SUBSTR'