Referenzieren von Capture-Gruppen in den regulären Ausdrücken von MySQL
MySQL bietet umfassende Unterstützung für reguläre Ausdrücke, einschließlich der Möglichkeit, Teile eines übereinstimmenden Musters zu erfassen und wiederzuverwenden . Allerdings unterscheiden sich Erfassungs- und Referenzierungsgruppen geringfügig von anderen Regex-Implementierungen.
Im bereitgestellten Beispiel versucht REGEXP '^(.)1$', ein Zeichen zu finden, das unmittelbar nach sich selbst wiederholt wird. Leider funktioniert es in MySQL nicht, da Erfassungsgruppen nicht nativ unterstützt werden.
Lösung für MySQL 8
MySQL 8 führt die Funktion REGEXP_REPLACE ein, die Erfassungsgruppen unterstützt . Um auf eine erfasste Gruppe zu verweisen, verwenden Sie $n, wobei n der Index der Erfassungsgruppe ist (beginnend bei 1). Zum Beispiel:
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)',''); -- Result: "overflowstack"
Im obigen Beispiel stimmt die erste Erfassungsgruppe ((.{5})) mit den ersten fünf Zeichen (Stapel) überein. Die zweite Capture-Gruppe ((.*)) entspricht den restlichen Zeichen (Überlauf). Sie werden dann in der Ersatzzeichenfolge ausgetauscht.
Lösung für MariaDB
MariaDB, ein Fork von MySQL, unterstützt auch Capture-Gruppen in Regex, jedoch mit einem anderen Ansatz. Es verwendet \n, um auf Capture-Gruppen in REGEXP_REPLACE:
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)','\2\1'); -- Result: "overflowstack"
Das obige ist der detaillierte Inhalt vonWie verweise ich auf Capture-Gruppen in den regulären Ausdrücken von MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!