No MariaDB, o
REGEXP_INSTR()
A função retorna o índice inicial de uma substring que corresponde ao padrão de expressão regular. O índice começa em
1
. Se não houver correspondência, o resultado será 0
. Sintaxe
A sintaxe fica assim:
REGEXP_INSTR(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_INSTR()
aceita menos argumentos que o REGEXP_INSTR()
do MySQL . A versão do MySQL permite que você forneça argumentos para a posição inicial da busca, qual ocorrência procurar, qual tipo de posição retornar, bem como uma forma de refinar a expressão regular. Exemplo
Segue um exemplo básico:
SELECT REGEXP_INSTR('Cat', 'at');
Resultado:
+---------------------------+ | REGEXP_INSTR('Cat', 'at') | +---------------------------+ | 2 | +---------------------------+
Nesse caso, há uma correspondência e a substring começa na posição 2.
Sem correspondência
Aqui está um exemplo em que não há correspondência:
SELECT REGEXP_INSTR('Cat', '^at');
Resultado:
+----------------------------+ | REGEXP_INSTR('Cat', '^at') | +----------------------------+ | 0 | +----------------------------+
Não há correspondência, então o resultado é
0
. Não há correspondência porque especifiquei que a string deve começar com a substring. Vamos alterá-lo para que faça comece com essa substring:
SELECT REGEXP_INSTR('at', '^at');
Resultado:
+---------------------------+ | REGEXP_INSTR('at', '^at') | +---------------------------+ | 1 | +---------------------------+
Sensibilidade de maiúsculas e minúsculas
O
REGEXP_INSTR()
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_INSTR('Cat', 'c') AS "My Default",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";
Resultado:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
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 um
BINARY
string também diferencia maiúsculas de minúsculas (veja abaixo). Strings binárias
Por padrão, as posições são medidas em caracteres em vez de bytes. No entanto, você pode converter um conjunto de caracteres de vários bytes para
BINARY
para obter deslocamentos em bytes, se necessário. Exemplo:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";
Resultado:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
O símbolo de copyright usa dois bytes e, portanto, neste exemplo, obtemos um resultado de
4
ao convertê-lo para BINARY
, em comparação com 3
que obtemos de outra forma. Embora note que passar um
BINARY
string também afeta a distinção entre maiúsculas e minúsculas. Com BINARY
strings, um caractere maiúsculo é diferente de sua contraparte minúscula:SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";
Resultado:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Aqui, procurei por uma letra minúscula
c
em vez de maiúsculas, e o BINARY
string não correspondia. Argumentos nulos
Passando
null
pois qualquer argumento resulta em null
:SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3";
Resultado:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Número errado de argumentos
Passar o número errado de argumentos ou nenhum argumento resulta em um erro:
SELECT REGEXP_INSTR('Cat');
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'