V MariaDB, REGEXP_INSTR() funkce vrací počáteční index podřetězce, který odpovídá vzoru regulárního výrazu.
Index začíná na 1 . Pokud není shoda, výsledek je 0 .
Syntaxe
Syntaxe vypadá takto:
REGEXP_INSTR(subject, pattern)
Kde subject je vstupní řetězec a pattern je vzor regulárního výrazu pro podřetězec.
Všimněte si, že v době psaní tohoto článku byla MariaDB verze REGEXP_INSTR() přijímá méně argumentů než REGEXP_INSTR() MySQL . Verze MySQL vám umožňuje poskytnout argumenty pro počáteční pozici vyhledávání, který výskyt hledat, jaký typ pozice vrátit, stejně jako způsob, jak upřesnit regulární výraz.
Příklad
Zde je základní příklad:
SELECT REGEXP_INSTR('Cat', 'at'); Výsledek:
+---------------------------+
| REGEXP_INSTR('Cat', 'at') |
+---------------------------+
| 2 |
+---------------------------+ V tomto případě existuje shoda a podřetězec začíná na pozici 2.
Žádná shoda
Zde je příklad, kdy neexistuje žádná shoda:
SELECT REGEXP_INSTR('Cat', '^at'); Výsledek:
+----------------------------+
| REGEXP_INSTR('Cat', '^at') |
+----------------------------+
| 0 |
+----------------------------+
Neexistuje žádná shoda, takže výsledek je 0 . Neexistuje žádná shoda, protože jsem zadal, že řetězec musí začínat podřetězcem.
Pojďme to změnit tak, aby to dělalo začněte tímto podřetězcem:
SELECT REGEXP_INSTR('at', '^at'); Výsledek:
+---------------------------+
| REGEXP_INSTR('at', '^at') |
+---------------------------+
| 1 |
+---------------------------+
Rozlišovat malá a velká písmena
REGEXP_INSTR() funkce se řídí pravidly rozlišování malých a velkých písmen efektivního řazení. Párování se provádí bez rozlišení malých a velkých písmen u porovnávání bez rozlišení malých a velkých písmen a u porovnávání rozlišujících malá a velká písmena a u binárních dat.
Zde je příklad:
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"; Výsledek:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
Moje výchozí řazení nerozlišuje malá a velká písmena. Zbývající dva řetězce byly nuceny používat řazení bez rozlišení malých a velkých písmen, respektive řazení rozlišující malá a velká písmena.
Poskytování BINARY řetězec také rozlišuje velká a malá písmena (viz níže).
Binární řetězce
Ve výchozím nastavení se pozice měří spíše ve znacích než v bajtech. Můžete však přetypovat vícebajtovou znakovou sadu na BINARY pro získání offsetů v bajtech, pokud potřebujete.
Příklad:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary"; Výsledek:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
Symbol autorských práv používá dva bajty, a proto v tomto příkladu dostaneme výsledek 4 při odesílání do BINARY , ve srovnání s 3 které dostaneme jinak.
Ačkoli mějte na paměti, že předávání BINARY řetězec také ovlivňuje citlivost. S BINARY řetězce, velký znak se liší od malého protějšku:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary"; Výsledek:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Zde jsem hledal malé písmeno c místo velkých písmen a BINARY řetězec se neshodoval.
Nulové argumenty
Předávání null protože jakýkoli argument má za následek null :
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3"; Výsledek:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Špatný počet argumentů
Předání nesprávného počtu argumentů nebo žádné argumenty vede k chybě:
SELECT REGEXP_INSTR('Cat'); Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'