MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie REGEXP_INSTR() in MariaDB funktioniert

In MariaDB der REGEXP_INSTR() Die Funktion gibt den Anfangsindex einer Teilzeichenfolge zurück, die dem regulären Ausdrucksmuster entspricht.

Der Index beginnt bei 1 . Wenn es keine Übereinstimmung gibt, ist das Ergebnis 0 .

Syntax

Die Syntax lautet wie folgt:

REGEXP_INSTR(subject, pattern)

Wobei subject ist die Eingabezeichenfolge und pattern ist das reguläre Ausdrucksmuster für die Teilzeichenfolge.

Beachten Sie, dass zum Zeitpunkt des Schreibens die MariaDB-Version von REGEXP_INSTR() akzeptiert weniger Argumente als MySQLs REGEXP_INSTR() . In der MySQL-Version können Sie Argumente für die Startposition der Suche angeben, nach welchem ​​Vorkommen gesucht werden soll, welche Art von Position zurückgegeben werden soll, sowie eine Möglichkeit, den regulären Ausdruck zu verfeinern.

Beispiel

Hier ist ein einfaches Beispiel:

SELECT REGEXP_INSTR('Cat', 'at');

Ergebnis:

+---------------------------+
| REGEXP_INSTR('Cat', 'at') |
+---------------------------+
|                         2 |
+---------------------------+

In diesem Fall gibt es eine Übereinstimmung und der Teilstring beginnt an Position 2.

Keine Übereinstimmung

Hier ist ein Beispiel, bei dem es keine Übereinstimmung gibt:

SELECT REGEXP_INSTR('Cat', '^at');

Ergebnis:

+----------------------------+
| REGEXP_INSTR('Cat', '^at') |
+----------------------------+
|                          0 |
+----------------------------+

Es gibt keine Übereinstimmung, also ist das Ergebnis 0 . Es gibt keine Übereinstimmung, weil ich angegeben habe, dass die Zeichenfolge mit der Teilzeichenfolge beginnen muss.

Ändern wir es so, dass es passt Beginnen Sie mit diesem Teilstring:

SELECT REGEXP_INSTR('at', '^at');

Ergebnis:

+---------------------------+
| REGEXP_INSTR('at', '^at') |
+---------------------------+
|                         1 |
+---------------------------+

Groß-/Kleinschreibung

Der REGEXP_INSTR() Funktion folgt den Regeln der Groß-/Kleinschreibung der effektiven Sortierung. Der Abgleich erfolgt bei Sortierungen ohne Berücksichtigung der Groß- und Kleinschreibung und bei Sortierungen mit Berücksichtigung der Groß- und Kleinschreibung und bei binären Daten.

Hier ist ein Beispiel:

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";

Ergebnis:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
|          1 |                1 |              0 |
+------------+------------------+----------------+

Bei meiner Standardsortierung wird die Groß-/Kleinschreibung nicht beachtet. Die anderen beiden Zeichenfolgen wurden zu einer Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung bzw. einer Sortierung mit Berücksichtigung der Groß-/Kleinschreibung gezwungen.

Bereitstellung eines BINARY string ist auch case sensitive (siehe unten).

Binäre Zeichenfolgen

Standardmäßig werden die Positionen in Zeichen und nicht in Bytes gemessen. Sie können jedoch einen Multibyte-Zeichensatz in BINARY umwandeln um bei Bedarf Offsets in Bytes zu erhalten.

Beispiel:

SELECT 
    REGEXP_INSTR('© Cat', 'C') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";

Ergebnis:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      4 |
+-----------+--------+

Das Copyright-Symbol verwendet zwei Bytes, und daher erhalten wir in diesem Beispiel ein Ergebnis von 4 beim Umwandeln in BINARY , verglichen mit 3 die wir sonst bekommen.

Beachten Sie jedoch, dass ein BINARY übergeben wird string wirkt sich auch auf die Groß-/Kleinschreibung aus. Mit BINARY Zeichenketten unterscheidet sich ein Großbuchstabe von seinem Kleinbuchstaben:

SELECT 
    REGEXP_INSTR('© Cat', 'c') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";

Ergebnis:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      0 |
+-----------+--------+

Hier habe ich nach einem kleinen c gesucht anstelle eines Großbuchstabens und BINARY Zeichenfolge stimmt nicht überein.

Null-Argumente

Übergabe von null da jedes Argument zu null führt :

SELECT 
    REGEXP_INSTR(null, 'c') AS "1",
    REGEXP_INSTR('Cat', null) AS "2",
    REGEXP_INSTR(null, null) AS "3";

Ergebnis:

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Falsche Anzahl von Argumenten

Das Übergeben der falschen Anzahl von Argumenten oder keiner Argumente führt zu einem Fehler:

SELECT REGEXP_INSTR('Cat');

Ergebnis:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'