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'