SET NAMES utf8
;
#
# MDEV-
4425 REGEXP enhancements
#
#
# Checking RLIKE
#
SELECT
'à' RLIKE
'^.$' ;
'à' RLIKE
'^.$'
1
SELECT
'à' RLIKE
'\\x{00E0}' ;
'à' RLIKE
'\\x{00E0}'
1
SELECT
'À' RLIKE
'\\x{00E0}' ;
'À' RLIKE
'\\x{00E0}'
1
SELECT
'à' RLIKE
'\\x{00C0}' ;
'à' RLIKE
'\\x{00C0}'
1
SELECT
'À' RLIKE
'\\x{00C0}' ;
'À' RLIKE
'\\x{00C0}'
1
SELECT
'à' RLIKE
'\\x{00E0}' COLLATE utf8_bin
;
'à' RLIKE
'\\x{00E0}' COLLATE utf8_bin
1
SELECT
'À' RLIKE
'\\x{00E0}' COLLATE utf8_bin
;
'À' RLIKE
'\\x{00E0}' COLLATE utf8_bin
0
SELECT
'à' RLIKE
'\\x{00C0}' COLLATE utf8_bin
;
'à' RLIKE
'\\x{00C0}' COLLATE utf8_bin
0
SELECT
'À' RLIKE
'\\x{00C0}' COLLATE utf8_bin
;
'À' RLIKE
'\\x{00C0}' COLLATE utf8_bin
1
CREATE TABLE t1 (s VARCHAR(
10 ) CHARACTER
SET utf8)
;
INSERT INTO t1 VALUES (
'a' ),(
'A' )
;
CREATE TABLE t2 (p VARCHAR(
10 ) CHARACTER
SET utf8)
;
INSERT INTO t2 VALUES (
'a' ),(
'(?i)a' ),(
'(?-i)a' ),(
'A' ),(
'(?i)A' ),(
'(?-i)A' )
;
SELECT s,p,s RLIKE p, s COLLATE utf8_bin RLIKE p FROM t1,t2 ORDER BY BINARY s, BINARY p
;
s p s RLIKE p s COLLATE utf8_bin RLIKE p
A (?-i)A
1 1
A (?-i)a
0 0
A (?i)A
1 1
A (?i)a
1 1
A A
1 1
A a
1 0
a (?-i)A
0 0
a (?-i)a
1 1
a (?i)A
1 1
a (?i)a
1 1
a A
1 0
a a
1 1
DROP TABLE t1,t2
;
CREATE TABLE t1 (ch VARCHAR(
22 )) CHARACTER
SET utf8
;
CREATE TABLE t2 (class VARCHAR(
32 )) CHARACTER
SET utf8
;
INSERT INTO t1 VALUES (
'Я' ),(
'Σ' ),(
'A' ),(
'À' )
;
INSERT INTO t1 VALUES (
'я' ),(
'σ' ),(
'a' ),(
'à' )
;
INSERT INTO t1 VALUES (
'㐗' ),(
'갷' ),(
'ප' )
;
INSERT INTO t1 VALUES (
'1' ),(
'௨' )
;
INSERT INTO t2 VALUES (
'\\p{Cyrillic}' ),(
'\\p{Greek}' ),(
'\\p{Latin}' )
;
INSERT INTO t2 VALUES (
'\\p{Han}' ),(
'\\p{Hangul}' )
;
INSERT INTO t2 VALUES (
'\\p{Sinhala}' ), (
'\\p{Tamil}' )
;
INSERT INTO t2 VALUES (
'\\p{L}' ),
/* buggy before v10.45 ('\\p{Ll}'),('\\p{Lu}'),*/ ('\\p{L&}');
INSERT INTO t2 VALUES (
'[[:alpha:]]' ),(
'[[:digit:]]' )
;
SELECT class, ch, ch RLIKE class FROM t1, t2 ORDER BY BINARY class, BINARY ch
;
class ch ch RLIKE class
[[:alpha:]]
1 0
[[:alpha:]] A
1
[[:alpha:]] a
1
[[:alpha:]] À
1
[[:alpha:]] à
1
[[:alpha:]] Σ
1
[[:alpha:]] σ
1
[[:alpha:]] Я
1
[[:alpha:]] я
1
[[:alpha:]] ௨
0
[[:alpha:]] ප
1
[[:alpha:]] 㐗
1
[[:alpha:]] 갷
1
[[:digit:]]
1 1
[[:digit:]] A
0
[[:digit:]] a
0
[[:digit:]] À
0
[[:digit:]] à
0
[[:digit:]] Σ
0
[[:digit:]] σ
0
[[:digit:]] Я
0
[[:digit:]] я
0
[[:digit:]] ௨
1
[[:digit:]] ප
0
[[:digit:]] 㐗
0
[[:digit:]] 갷
0
\p{Cyrillic}
1 0
\p{Cyrillic} A
0
\p{Cyrillic} a
0
\p{Cyrillic} À
0
\p{Cyrillic} à
0
\p{Cyrillic} Σ
0
\p{Cyrillic} σ
0
\p{Cyrillic} Я
1
\p{Cyrillic} я
1
\p{Cyrillic} ௨
0
\p{Cyrillic} ප
0
\p{Cyrillic} 㐗
0
\p{Cyrillic} 갷
0
\p{Greek}
1 0
\p{Greek} A
0
\p{Greek} a
0
\p{Greek} À
0
\p{Greek} à
0
\p{Greek} Σ
1
\p{Greek} σ
1
\p{Greek} Я
0
\p{Greek} я
0
\p{Greek} ௨
0
\p{Greek} ප
0
\p{Greek} 㐗
0
\p{Greek} 갷
0
\p{Hangul}
1 0
\p{Hangul} A
0
\p{Hangul} a
0
\p{Hangul} À
0
\p{Hangul} à
0
\p{Hangul} Σ
0
\p{Hangul} σ
0
\p{Hangul} Я
0
\p{Hangul} я
0
\p{Hangul} ௨
0
\p{Hangul} ප
0
\p{Hangul} 㐗
0
\p{Hangul} 갷
1
\p{Han}
1 0
\p{Han} A
0
\p{Han} a
0
\p{Han} À
0
\p{Han} à
0
\p{Han} Σ
0
\p{Han} σ
0
\p{Han} Я
0
\p{Han} я
0
\p{Han} ௨
0
\p{Han} ප
0
\p{Han} 㐗
1
\p{Han} 갷
0
\p{L&}
1 0
\p{L&} A
1
\p{L&} a
1
\p{L&} À
1
\p{L&} à
1
\p{L&} Σ
1
\p{L&} σ
1
\p{L&} Я
1
\p{L&} я
1
\p{L&} ௨
0
\p{L&} ප
0
\p{L&} 㐗
0
\p{L&} 갷
0
\p{Latin}
1 0
\p{Latin} A
1
\p{Latin} a
1
\p{Latin} À
1
\p{Latin} à
1
\p{Latin} Σ
0
\p{Latin} σ
0
\p{Latin} Я
0
\p{Latin} я
0
\p{Latin} ௨
0
\p{Latin} ප
0
\p{Latin} 㐗
0
\p{Latin} 갷
0
\p{L}
1 0
\p{L} A
1
\p{L} a
1
\p{L} À
1
\p{L} à
1
\p{L} Σ
1
\p{L} σ
1
\p{L} Я
1
\p{L} я
1
\p{L} ௨
0
\p{L} ප
1
\p{L} 㐗
1
\p{L} 갷
1
\p{Sinhala}
1 0
\p{Sinhala} A
0
\p{Sinhala} a
0
\p{Sinhala} À
0
\p{Sinhala} à
0
\p{Sinhala} Σ
0
\p{Sinhala} σ
0
\p{Sinhala} Я
0
\p{Sinhala} я
0
\p{Sinhala} ௨
0
\p{Sinhala} ප
1
\p{Sinhala} 㐗
0
\p{Sinhala} 갷
0
\p{Tamil}
1 0
\p{Tamil} A
0
\p{Tamil} a
0
\p{Tamil} À
0
\p{Tamil} à
0
\p{Tamil} Σ
0
\p{Tamil} σ
0
\p{Tamil} Я
0
\p{Tamil} я
0
\p{Tamil} ௨
1
\p{Tamil} ප
0
\p{Tamil} 㐗
0
\p{Tamil} 갷
0
DROP TABLE t1, t2
;
SELECT
0 xFF RLIKE
'\\w' ;
0 xFF RLIKE
'\\w'
0
SELECT
0 xFF RLIKE
'(*UCP)\\w' ;
0 xFF RLIKE
'(*UCP)\\w'
1
SELECT
'\n' RLIKE
'(*CR)' ;
'\n' RLIKE
'(*CR)'
1
SELECT
'\n' RLIKE
'(*LF)' ;
'\n' RLIKE
'(*LF)'
1
SELECT
'\n' RLIKE
'(*CRLF)' ;
'\n' RLIKE
'(*CRLF)'
1
SELECT
'\n' RLIKE
'(*ANYCRLF)' ;
'\n' RLIKE
'(*ANYCRLF)'
1
SELECT
'\n' RLIKE
'(*ANY)' ;
'\n' RLIKE
'(*ANY)'
1
SELECT
'a\nb' RLIKE
'(*LF)(?m)^a$' ;
'a\nb' RLIKE
'(*LF)(?m)^a$'
1
SELECT
'a\nb' RLIKE
'(*CR)(?m)^a$' ;
'a\nb' RLIKE
'(*CR)(?m)^a$'
0
SELECT
'a\nb' RLIKE
'(*CRLF)(?m)^a$' ;
'a\nb' RLIKE
'(*CRLF)(?m)^a$'
0
SELECT
'a\nb' RLIKE
'(*ANYCRLF)(?m)^a$' ;
'a\nb' RLIKE
'(*ANYCRLF)(?m)^a$'
1
SELECT
'a\rb' RLIKE
'(*LF)(?m)^a$' ;
'a\rb' RLIKE
'(*LF)(?m)^a$'
0
SELECT
'a\rb' RLIKE
'(*CR)(?m)^a$' ;
'a\rb' RLIKE
'(*CR)(?m)^a$'
1
SELECT
'a\rb' RLIKE
'(*CRLF)(?m)^a$' ;
'a\rb' RLIKE
'(*CRLF)(?m)^a$'
0
SELECT
'a\rb' RLIKE
'(*ANYCRLF)(?m)^a$' ;
'a\rb' RLIKE
'(*ANYCRLF)(?m)^a$'
1
SELECT
'a\r\nb' RLIKE
'(*LF)(?m)^a$' ;
'a\r\nb' RLIKE
'(*LF)(?m)^a$'
0
SELECT
'a\r\nb' RLIKE
'(*CR)(?m)^a$' ;
'a\r\nb' RLIKE
'(*CR)(?m)^a$'
1
SELECT
'a\r\nb' RLIKE
'(*CRLF)(?m)^a$' ;
'a\r\nb' RLIKE
'(*CRLF)(?m)^a$'
1
SELECT
'a\r\nb' RLIKE
'(*ANYCRLF)(?m)^a$' ;
'a\r\nb' RLIKE
'(*ANYCRLF)(?m)^a$'
1
SELECT
'aa' RLIKE
'(a)\\g1' ;
'aa' RLIKE
'(a)\\g1'
1
SELECT
'aa bb' RLIKE
'(a)\\g1 (b)\\g2' ;
'aa bb' RLIKE
'(a)\\g1 (b)\\g2'
1
SELECT
'aaaaa' RLIKE
'a{0,5}' ;
'aaaaa' RLIKE
'a{0,5}'
1
SELECT
'aaaaa' RLIKE
'a{1,3}' ;
'aaaaa' RLIKE
'a{1,3}'
1
SELECT
'aaaaa' RLIKE
'a{0,}' ;
'aaaaa' RLIKE
'a{0,}'
1
SELECT
'aaaaa' RLIKE
'a{10,20}' ;
'aaaaa' RLIKE
'a{10,20}'
0
SELECT
'aabb' RLIKE
'a(?R)?b' ;
'aabb' RLIKE
'a(?R)?b'
1
SELECT
'aabb' RLIKE
'aa(?R)?bb' ;
'aabb' RLIKE
'aa(?R)?bb'
1
SELECT
'abcc' RLIKE
'a(?>bc|b)c' ;
'abcc' RLIKE
'a(?>bc|b)c'
1
SELECT
'abc' RLIKE
'a(?>bc|b)c' ;
'abc' RLIKE
'a(?>bc|b)c'
0
SELECT
'ab' RLIKE
'a(?!b)' ;
'ab' RLIKE
'a(?!b)'
0
SELECT
'ac' RLIKE
'a(?!b)' ;
'ac' RLIKE
'a(?!b)'
1
SELECT
'ab' RLIKE
'a(?=b)' ;
'ab' RLIKE
'a(?=b)'
1
SELECT
'ac' RLIKE
'a(?=b)' ;
'ac' RLIKE
'a(?=b)'
0
SELECT
'ab' RLIKE
'(?<!a)b' ;
'ab' RLIKE
'(?<!a)b'
0
SELECT
'cb' RLIKE
'(?<!a)b' ;
'cb' RLIKE
'(?<!a)b'
1
SELECT
'ab' RLIKE
'(?<=a)b' ;
'ab' RLIKE
'(?<=a)b'
1
SELECT
'cb' RLIKE
'(?<=a)b' ;
'cb' RLIKE
'(?<=a)b'
0
SELECT
'aa' RLIKE
'(?P<pattern>a)(?P=pattern)' ;
'aa' RLIKE
'(?P<pattern>a)(?P=pattern)'
1
SELECT
'aba' RLIKE
'(?P<pattern>a)b(?P=pattern)' ;
'aba' RLIKE
'(?P<pattern>a)b(?P=pattern)'
1
SELECT
'a' RLIKE
'a(?#comment)' ;
'a' RLIKE
'a(?#comment)'
1
SELECT
'aa' RLIKE
'a(?#comment)a' ;
'aa' RLIKE
'a(?#comment)a'
1
SELECT
'aba' RLIKE
'a(?#b)a' ;
'aba' RLIKE
'a(?#b)a'
0
SELECT
'aaa' RLIKE
'\\W\\W\\W' ;
'aaa' RLIKE
'\\W\\W\\W'
0
SELECT
'%' RLIKE
'\\W' ;
'%' RLIKE
'\\W'
1
SELECT
'%a$' RLIKE
'\\W.\\W' ;
'%a$' RLIKE
'\\W.\\W'
1
SELECT
'123' RLIKE
'\\d\\d\\d' ;
'123' RLIKE
'\\d\\d\\d'
1
SELECT
'aaa' RLIKE
'\\d\\d\\d' ;
'aaa' RLIKE
'\\d\\d\\d'
0
SELECT
'1a3' RLIKE
'\\d.\\d' ;
'1a3' RLIKE
'\\d.\\d'
1
SELECT
'a1b' RLIKE
'\\d.\\d' ;
'a1b' RLIKE
'\\d.\\d'
0
SELECT
'8' RLIKE
'\\D' ;
'8' RLIKE
'\\D'
0
SELECT
'a' RLIKE
'\\D' ;
'a' RLIKE
'\\D'
1
SELECT
'%' RLIKE
'\\D' ;
'%' RLIKE
'\\D'
1
SELECT
'a1' RLIKE
'\\D\\d' ;
'a1' RLIKE
'\\D\\d'
1
SELECT
'a1' RLIKE
'\\d\\D' ;
'a1' RLIKE
'\\d\\D'
0
SELECT
'\t' RLIKE
'\\s' ;
'\t' RLIKE
'\\s'
1
SELECT
'\r' RLIKE
'\\s' ;
'\r' RLIKE
'\\s'
1
SELECT
'\n' RLIKE
'\\s' ;
'\n' RLIKE
'\\s'
1
SELECT
'\v' RLIKE
'\\s' ;
'\v' RLIKE
'\\s'
0
SELECT
'a' RLIKE
'\\S' ;
'a' RLIKE
'\\S'
1
SELECT
'1' RLIKE
'\\S' ;
'1' RLIKE
'\\S'
1
SELECT
'!' RLIKE
'\\S' ;
'!' RLIKE
'\\S'
1
SELECT
'.' RLIKE
'\\S' ;
'.' RLIKE
'\\S'
1
SELECT
'abc\0def' REGEXP
'def' ;
'abc\0def' REGEXP
'def'
1
SELECT
'abc\0def' REGEXP
'abc\\x{00}def' ;
'abc\0def' REGEXP
'abc\\x{00}def'
1
SELECT HEX(REGEXP_SUBSTR(
'abc\0def' ,
'abc\\x{00}def' ))
;
HEX(REGEXP_SUBSTR(
'abc\0def' ,
'abc\\x{00}def' ))
61626300646566
#
# Checking REGEXP_REPLACE
#
CREATE TABLE t1 AS SELECT REGEXP_REPLACE(
'abc' ,
'b' ,
'x' )
;
SHOW CREATE TABLE t1
;
Table Create Table
t1 CREATE TABLE `t1` (
`REGEXP_REPLACE(
'abc' ,
'b' ,
'x' )` longtext DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
DROP TABLE t1
;
EXPLAIN EXTENDED SELECT REGEXP_REPLACE(
'abc' ,
'b' ,
'x' )
;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
Warnings:
Note
1003 select regexp_replace(
'abc' ,
'b' ,
'x' ) AS `REGEXP_REPLACE(
'abc' ,
'b' ,
'x' )`
SET STATEMENT sql_mode =
'NO_ENGINE_SUBSTITUTION' FOR
CREATE TABLE t1 AS SELECT REGEXP_REPLACE(
'abc' ,
'b' ,
'x' )+
0 ;
Warnings:
Warning
1292 Truncated incorrect DOUBLE value:
'axc'
SHOW CREATE TABLE t1
;
Table Create Table
t1 CREATE TABLE `t1` (
`REGEXP_REPLACE(
'abc' ,
'b' ,
'x' )+
0 ` double
NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
DROP TABLE t1
;
SELECT REGEXP_REPLACE(NULL,
'b' ,
'c' )
;
REGEXP_REPLACE(NULL,
'b' ,
'c' )
NULL
SELECT REGEXP_REPLACE(
'a' ,NULL,
'c' )
;
REGEXP_REPLACE(
'a' ,NULL,
'c' )
NULL
SELECT REGEXP_REPLACE(
'a' ,
'b' ,NULL)
;
REGEXP_REPLACE(
'a' ,
'b' ,NULL)
NULL
SELECT REGEXP_REPLACE(
'a' ,
'x' ,
'b' )
;
REGEXP_REPLACE(
'a' ,
'x' ,
'b' )
a
SELECT REGEXP_REPLACE(
'a' ,
'' ,
'b' )
;
REGEXP_REPLACE(
'a' ,
'' ,
'b' )
a
SELECT REGEXP_REPLACE(
'a5b ab a5b' ,
'(?<=a)5*(?=b)' ,
'x' )
;
REGEXP_REPLACE(
'a5b ab a5b' ,
'(?<=a)5*(?=b)' ,
'x' )
axb ab a5b
SELECT REGEXP_REPLACE(
'a5b a5b a5b' ,
'(?<=a)5*(?=b)' ,
'x' )
;
REGEXP_REPLACE(
'a5b a5b a5b' ,
'(?<=a)5*(?=b)' ,
'x' )
axb axb axb
SELECT REGEXP_REPLACE(
'A' ,
'a' ,
'b' )
;
REGEXP_REPLACE(
'A' ,
'a' ,
'b' )
b
SELECT REGEXP_REPLACE(
'a' ,
'A' ,
'b' )
;
REGEXP_REPLACE(
'a' ,
'A' ,
'b' )
b
SELECT REGEXP_REPLACE(
'A' COLLATE utf8_bin,
'a' ,
'b' )
;
REGEXP_REPLACE(
'A' COLLATE utf8_bin,
'a' ,
'b' )
A
SELECT REGEXP_REPLACE(
'a' COLLATE utf8_bin,
'A' ,
'b' )
;
REGEXP_REPLACE(
'a' COLLATE utf8_bin,
'A' ,
'b' )
a
SELECT REGEXP_REPLACE(
'James Bond' ,
'(.*) (.*)' ,
'\\2, \\1 \\2' )
;
REGEXP_REPLACE(
'James Bond' ,
'(.*) (.*)' ,
'\\2, \\1 \\2' )
Bond, James Bond
SELECT REGEXP_REPLACE(
'абвгд' ,
'в' ,
'ц' )
;
REGEXP_REPLACE(
'абвгд' ,
'в' ,
'ц' )
абцгд
SELECT REGEXP_REPLACE(
'г' ,
0 xB3,
0 xB4)
;
REGEXP_REPLACE(
'г' ,
0 xB3,
0 xB4)
д
SELECT REGEXP_REPLACE(
'aaaa' ,
'a' ,
'b' )
;
REGEXP_REPLACE(
'aaaa' ,
'a' ,
'b' )
bbbb
SELECT REGEXP_REPLACE(
'aaaa' ,
'(?<=.)a' ,
'b' )
;
REGEXP_REPLACE(
'aaaa' ,
'(?<=.)a' ,
'b' )
abbb
SELECT REGEXP_REPLACE(
'aaaa' ,
'a(?=.)' ,
'b' )
;
REGEXP_REPLACE(
'aaaa' ,
'a(?=.)' ,
'b' )
bbba
SELECT REGEXP_REPLACE(
'aaaa' ,
'(?<=.)a(?=.)' ,
'b' )
;
REGEXP_REPLACE(
'aaaa' ,
'(?<=.)a(?=.)' ,
'b' )
abba
SELECT REGEXP_REPLACE(
'a\nb' ,
'(*LF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\nb' ,
'(*LF)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'a\nb' ,
'(*CR)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\nb' ,
'(*CR)(?m)^a$' ,
'c' )
a
b
SELECT REGEXP_REPLACE(
'a\nb' ,
'(*CRLF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\nb' ,
'(*CRLF)(?m)^a$' ,
'c' )
a
b
SELECT REGEXP_REPLACE(
'a\nb' ,
'(*ANYCRLF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\nb' ,
'(*ANYCRLF)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'a\rb' ,
'(*LF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\rb' ,
'(*LF)(?m)^a$' ,
'c' )
a
b
SELECT REGEXP_REPLACE(
'a\rb' ,
'(*CR)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\rb' ,
'(*CR)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'a\rb' ,
'(*CRLF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\rb' ,
'(*CRLF)(?m)^a$' ,
'c' )
a
b
SELECT REGEXP_REPLACE(
'a\rb' ,
'(*ANYCRLF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\rb' ,
'(*ANYCRLF)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'a\r\nb' ,
'(*LF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\r\nb' ,
'(*LF)(?m)^a$' ,
'c' )
a
b
SELECT REGEXP_REPLACE(
'a\r\nb' ,
'(*CR)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\r\nb' ,
'(*CR)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'a\r\nb' ,
'(*CRLF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\r\nb' ,
'(*CRLF)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'a\r\nb' ,
'(*ANYCRLF)(?m)^a$' ,
'c' )
;
REGEXP_REPLACE(
'a\r\nb' ,
'(*ANYCRLF)(?m)^a$' ,
'c' )
c
b
SELECT REGEXP_REPLACE(
'aa' ,
'(a)\\g1' ,
'b' )
;
REGEXP_REPLACE(
'aa' ,
'(a)\\g1' ,
'b' )
b
SELECT REGEXP_REPLACE(
'aa bb' ,
'(a)\\g1 (b)\\g2' ,
'c' )
;
REGEXP_REPLACE(
'aa bb' ,
'(a)\\g1 (b)\\g2' ,
'c' )
c
SELECT REGEXP_REPLACE(
'aaaaa' ,
'a{1,3}' ,
'b' )
;
REGEXP_REPLACE(
'aaaaa' ,
'a{1,3}' ,
'b' )
bb
SELECT REGEXP_REPLACE(
'aaaaa' ,
'a{10,20}' ,
'b' )
;
REGEXP_REPLACE(
'aaaaa' ,
'a{10,20}' ,
'b' )
aaaaa
SELECT REGEXP_REPLACE(
'daabbd' ,
'a(?R)?b' ,
'c' )
;
REGEXP_REPLACE(
'daabbd' ,
'a(?R)?b' ,
'c' )
dcd
SELECT REGEXP_REPLACE(
'daabbd' ,
'aa(?R)?bb' ,
'c' )
;
REGEXP_REPLACE(
'daabbd' ,
'aa(?R)?bb' ,
'c' )
dcd
SELECT REGEXP_REPLACE(
'dabccd' ,
'a(?>bc|b)c' ,
'e' )
;
REGEXP_REPLACE(
'dabccd' ,
'a(?>bc|b)c' ,
'e' )
ded
SELECT REGEXP_REPLACE(
'dabcd' ,
'a(?>bc|b)c' ,
'e' )
;
REGEXP_REPLACE(
'dabcd' ,
'a(?>bc|b)c' ,
'e' )
dabcd
SELECT REGEXP_REPLACE(
'ab' ,
'a(?!b)' ,
'e' )
;
REGEXP_REPLACE(
'ab' ,
'a(?!b)' ,
'e' )
ab
SELECT REGEXP_REPLACE(
'ac' ,
'a(?!b)' ,
'e' )
;
REGEXP_REPLACE(
'ac' ,
'a(?!b)' ,
'e' )
ec
SELECT REGEXP_REPLACE(
'ab' ,
'a(?=b)' ,
'e' )
;
REGEXP_REPLACE(
'ab' ,
'a(?=b)' ,
'e' )
eb
SELECT REGEXP_REPLACE(
'ac' ,
'a(?=b)' ,
'e' )
;
REGEXP_REPLACE(
'ac' ,
'a(?=b)' ,
'e' )
ac
SELECT REGEXP_REPLACE(
'ab' ,
'(?<!a)b' ,
'e' )
;
REGEXP_REPLACE(
'ab' ,
'(?<!a)b' ,
'e' )
ab
SELECT REGEXP_REPLACE(
'cb' ,
'(?<!a)b' ,
'e' )
;
REGEXP_REPLACE(
'cb' ,
'(?<!a)b' ,
'e' )
ce
SELECT REGEXP_REPLACE(
'ab' ,
'(?<=a)b' ,
'e' )
;
REGEXP_REPLACE(
'ab' ,
'(?<=a)b' ,
'e' )
ae
SELECT REGEXP_REPLACE(
'cb' ,
'(?<=a)b' ,
'e' )
;
REGEXP_REPLACE(
'cb' ,
'(?<=a)b' ,
'e' )
cb
SELECT REGEXP_REPLACE(
'aa' ,
'(?P<pattern>a)(?P=pattern)' ,
'b' )
;
REGEXP_REPLACE(
'aa' ,
'(?P<pattern>a)(?P=pattern)' ,
'b' )
b
SELECT REGEXP_REPLACE(
'aba' ,
'(?P<pattern>a)b(?P=pattern)' ,
'c' )
;
REGEXP_REPLACE(
'aba' ,
'(?P<pattern>a)b(?P=pattern)' ,
'c' )
c
SELECT REGEXP_REPLACE(
'a' ,
'a(?#comment)' ,
'e' )
;
REGEXP_REPLACE(
'a' ,
'a(?#comment)' ,
'e' )
e
SELECT REGEXP_REPLACE(
'aa' ,
'a(?#comment)a' ,
'e' )
;
REGEXP_REPLACE(
'aa' ,
'a(?#comment)a' ,
'e' )
e
SELECT REGEXP_REPLACE(
'aba' ,
'a(?#b)a' ,
'e' )
;
REGEXP_REPLACE(
'aba' ,
'a(?#b)a' ,
'e' )
aba
SELECT REGEXP_REPLACE(
'ddd<ab>cc</ab>eee' ,
'<.+?>' ,
'*' )
;
REGEXP_REPLACE(
'ddd<ab>cc</ab>eee' ,
'<.+?>' ,
'*' )
ddd*cc*eee
SELECT REGEXP_REPLACE(
'aaa' ,
'\\W\\W\\W' ,
'e' )
;
REGEXP_REPLACE(
'aaa' ,
'\\W\\W\\W' ,
'e' )
aaa
SELECT REGEXP_REPLACE(
'aaa' ,
'\\w\\w\\w' ,
'e' )
;
REGEXP_REPLACE(
'aaa' ,
'\\w\\w\\w' ,
'e' )
e
SELECT REGEXP_REPLACE(
'%' ,
'\\W' ,
'e' )
;
REGEXP_REPLACE(
'%' ,
'\\W' ,
'e' )
e
SELECT REGEXP_REPLACE(
'%a$' ,
'\\W.\\W' ,
'e' )
;
REGEXP_REPLACE(
'%a$' ,
'\\W.\\W' ,
'e' )
e
SELECT REGEXP_REPLACE(
'%a$' ,
'\\W\\w\\W' ,
'e' )
;
REGEXP_REPLACE(
'%a$' ,
'\\W\\w\\W' ,
'e' )
e
SELECT REGEXP_REPLACE(
'123' ,
'\\d\\d\\d\\d\\d\\d' ,
'e' )
;
REGEXP_REPLACE(
'123' ,
'\\d\\d\\d\\d\\d\\d' ,
'e' )
123
SELECT REGEXP_REPLACE(
'123' ,
'\\d\\d\\d' ,
'e' )
;
REGEXP_REPLACE(
'123' ,
'\\d\\d\\d' ,
'e' )
e
SELECT REGEXP_REPLACE(
'aaa' ,
'\\d\\d\\d' ,
'e' )
;
REGEXP_REPLACE(
'aaa' ,
'\\d\\d\\d' ,
'e' )
aaa
SELECT REGEXP_REPLACE(
'1a3' ,
'\\d.\\d\\d.\\d' ,
'e' )
;
REGEXP_REPLACE(
'1a3' ,
'\\d.\\d\\d.\\d' ,
'e' )
1 a3
SELECT REGEXP_REPLACE(
'1a3' ,
'\\d.\\d' ,
'e' )
;
REGEXP_REPLACE(
'1a3' ,
'\\d.\\d' ,
'e' )
e
SELECT REGEXP_REPLACE(
'a1b' ,
'\\d.\\d' ,
'e' )
;
REGEXP_REPLACE(
'a1b' ,
'\\d.\\d' ,
'e' )
a1b
SELECT REGEXP_REPLACE(
'8' ,
'\\D' ,
'e' )
;
REGEXP_REPLACE(
'8' ,
'\\D' ,
'e' )
8
SELECT REGEXP_REPLACE(
'a' ,
'\\D' ,
'e' )
;
REGEXP_REPLACE(
'a' ,
'\\D' ,
'e' )
e
SELECT REGEXP_REPLACE(
'%' ,
'\\D' ,
'e' )
;
REGEXP_REPLACE(
'%' ,
'\\D' ,
'e' )
e
SELECT REGEXP_REPLACE(
'a1' ,
'\\D\\d' ,
'e' )
;
REGEXP_REPLACE(
'a1' ,
'\\D\\d' ,
'e' )
e
SELECT REGEXP_REPLACE(
'a1' ,
'\\d\\D' ,
'e' )
;
REGEXP_REPLACE(
'a1' ,
'\\d\\D' ,
'e' )
a1
SELECT REGEXP_REPLACE(
'\t' ,
'\\s' ,
'e' )
;
REGEXP_REPLACE(
'\t' ,
'\\s' ,
'e' )
e
SELECT REGEXP_REPLACE(
'\r' ,
'\\s' ,
'e' )
;
REGEXP_REPLACE(
'\r' ,
'\\s' ,
'e' )
e
SELECT REGEXP_REPLACE(
'\n' ,
'\\s' ,
'e' )
;
REGEXP_REPLACE(
'\n' ,
'\\s' ,
'e' )
e
SELECT REGEXP_REPLACE(
'a' ,
'\\S' ,
'e' )
;
REGEXP_REPLACE(
'a' ,
'\\S' ,
'e' )
e
SELECT REGEXP_REPLACE(
'1' ,
'\\S' ,
'e' )
;
REGEXP_REPLACE(
'1' ,
'\\S' ,
'e' )
e
SELECT REGEXP_REPLACE(
'!' ,
'\\S' ,
'e' )
;
REGEXP_REPLACE(
'!' ,
'\\S' ,
'e' )
e
SELECT REGEXP_REPLACE(
'.' ,
'\\S' ,
'e' )
;
REGEXP_REPLACE(
'.' ,
'\\S' ,
'e' )
e
#
# Checking REGEXP_INSTR
#
SELECT REGEXP_INSTR(
'abcd' ,
'X' )
;
REGEXP_INSTR(
'abcd' ,
'X' )
0
SELECT REGEXP_INSTR(
'abcd' ,
'a' )
;
REGEXP_INSTR(
'abcd' ,
'a' )
1
SELECT REGEXP_INSTR(
'abcd' ,
'b' )
;
REGEXP_INSTR(
'abcd' ,
'b' )
2
SELECT REGEXP_INSTR(
'abcd' ,
'c' )
;
REGEXP_INSTR(
'abcd' ,
'c' )
3
SELECT REGEXP_INSTR(
'abcd' ,
'd' )
;
REGEXP_INSTR(
'abcd' ,
'd' )
4
SELECT REGEXP_INSTR(
'aaaa' ,
'(?<=a)a' )
;
REGEXP_INSTR(
'aaaa' ,
'(?<=a)a' )
2
SELECT REGEXP_INSTR(
'вася' ,
'в' )
;
REGEXP_INSTR(
'вася' ,
'в' )
1
SELECT REGEXP_INSTR(
'вася' ,
'а' )
;
REGEXP_INSTR(
'вася' ,
'а' )
2
SELECT REGEXP_INSTR(
'вася' ,
'с' )
;
REGEXP_INSTR(
'вася' ,
'с' )
3
SELECT REGEXP_INSTR(
'вася' ,
'я' )
;
REGEXP_INSTR(
'вася' ,
'я' )
4
SELECT REGEXP_INSTR(CONVERT(
'вася' USING koi8r), CONVERT(
'в' USING koi8r)) as exp
;
exp
1
SELECT REGEXP_INSTR(CONVERT(
'вася' USING koi8r), CONVERT(
'а' USING koi8r)) as exp
;
exp
2
SELECT REGEXP_INSTR(CONVERT(
'вася' USING koi8r), CONVERT(
'с' USING koi8r)) as exp
;
exp
3
SELECT REGEXP_INSTR(CONVERT(
'вася' USING koi8r), CONVERT(
'я' USING koi8r)) as exp
;
exp
4
#
# Checking REGEXP_SUBSTR
#
CREATE TABLE t1 AS SELECT REGEXP_SUBSTR(
'abc' ,
'b' )
;
SHOW CREATE TABLE t1
;
Table Create Table
t1 CREATE TABLE `t1` (
`REGEXP_SUBSTR(
'abc' ,
'b' )` varchar(
3 ) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
DROP TABLE t1
;
EXPLAIN EXTENDED SELECT REGEXP_SUBSTR(
'abc' ,
'b' )
;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
Warnings:
Note
1003 select regexp_substr(
'abc' ,
'b' ) AS `REGEXP_SUBSTR(
'abc' ,
'b' )`
SET STATEMENT sql_mode =
'NO_ENGINE_SUBSTITUTION' FOR
CREATE TABLE t1 AS SELECT REGEXP_SUBSTR(
'abc' ,
'b' )+
0 ;
Warnings:
Warning
1292 Truncated incorrect DOUBLE value:
'b'
SHOW CREATE TABLE t1
;
Table Create Table
t1 CREATE TABLE `t1` (
`REGEXP_SUBSTR(
'abc' ,
'b' )+
0 ` double
NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
DROP TABLE t1
;
SELECT REGEXP_SUBSTR(
'See https://mariadb.org/en/foundation/ for details' ,
'https?://[^/]*' ) as exp
;
exp
https://mariadb.org
#
# MDEV-
6027 RLIKE:
"." no longer matching new line
#
SELECT
'cat and\ndog' RLIKE
'cat.*dog' ;
'cat and\ndog' RLIKE
'cat.*dog'
0
SELECT
'cat and\r\ndog' RLIKE
'cat.*dog' ;
'cat and\r\ndog' RLIKE
'cat.*dog'
0
SELECT
'a\nb' RLIKE
'a.b' ;
'a\nb' RLIKE
'a.b'
0
SELECT
'a\nb' RLIKE
'(?-s)a.b' ;
'a\nb' RLIKE
'(?-s)a.b'
0
SET default_regex_flags=
'DOTALL' ;
SELECT @@default_regex_flags
;
@@default_regex_flags
DOTALL
SELECT
'cat and\ndog' RLIKE
'cat.*dog' ;
'cat and\ndog' RLIKE
'cat.*dog'
1
SELECT
'cat and\r\ndog' RLIKE
'cat.*dog' ;
'cat and\r\ndog' RLIKE
'cat.*dog'
1
SELECT
'a\nb' RLIKE
'a.b' ;
'a\nb' RLIKE
'a.b'
1
SELECT
'a\nb' RLIKE
'(?-s)a.b' ;
'a\nb' RLIKE
'(?-s)a.b'
0
SET default_regex_flags=DEFAULT
;
SELECT REGEXP_SUBSTR(
'Monday Mon' ,
'^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$' )
as exp;
ERROR 42000 : Regex error 'two named subpatterns have the same name (PCRE2_DUPNAMES not set) at offset 30'
SET default_regex_flags='DUPNAMES' ;
SELECT REGEXP_SUBSTR('Monday Mon' ,'^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$' ) as exp;
exp
Monday Mon
SELECT REGEXP_SUBSTR('Tuesday Tue' ,'^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$' ) as exp;
exp
Tuesday Tue
SET default_regex_flags=DEFAULT;
SELECT 'AB' RLIKE 'A B' ;
'AB' RLIKE 'A B'
0
SELECT 'AB' RLIKE 'A# this is a comment\nB' ;
'AB' RLIKE 'A# this is a comment\nB'
0
SET default_regex_flags='EXTENDED' ;
SELECT 'AB' RLIKE 'A B' ;
'AB' RLIKE 'A B'
1
SELECT 'AB' RLIKE 'A# this is a comment\nB' ;
'AB' RLIKE 'A# this is a comment\nB'
1
SET default_regex_flags=DEFAULT;
SELECT 'Aq' RLIKE 'A\\q' ;
ERROR 42000 : Regex error 'unrecognized character follows \ at offset 3'
SET default_regex_flags='EXTRA' ;
SELECT 'A' RLIKE 'B' ;
'A' RLIKE 'B'
0
Warnings:
Warning 1105 PCRE2 doesn't support the EXTRA flag. Ignored.
SET default_regex_flags=DEFAULT;
SELECT 'a\nb\nc' RLIKE '^b$' ;
'a\nb\nc' RLIKE '^b$'
0
SET default_regex_flags='MULTILINE' ;
SELECT 'a\nb\nc' RLIKE '^b$' ;
'a\nb\nc' RLIKE '^b$'
1
SET default_regex_flags=DEFAULT;
SELECT REGEXP_SUBSTR('abc' ,'.+' );
REGEXP_SUBSTR('abc' ,'.+' )
abc
SELECT REGEXP_REPLACE('abc' ,'^(.*)(.*)$' ,'\\1/\\2' );
REGEXP_REPLACE('abc' ,'^(.*)(.*)$' ,'\\1/\\2' )
abc/
SET default_regex_flags='UNGREEDY' ;
SELECT REGEXP_SUBSTR('abc' ,'.+' );
REGEXP_SUBSTR('abc' ,'.+' )
a
SELECT REGEXP_REPLACE('abc' ,'^(.*)(.*)$' ,'\\1/\\2' );
REGEXP_REPLACE('abc' ,'^(.*)(.*)$' ,'\\1/\\2' )
/abc
SET default_regex_flags=DEFAULT;
#
# MDEV-6965 non-captured group \2 in regexp_replace
#
SELECT REGEXP_REPLACE('1 foo and bar' , '(\\d+) foo and (\\d+ )?bar' , '\\1 this and \\2that' ) as exp;
exp
1 this and that
#
# MDEV-8102 REGEXP function fails to match hex values when expression is stored as a variable
#
# Testing a warning
SET NAMES latin1;
SET @regCheck= '\\xE0\\x01' ;
SELECT 0 xE001 REGEXP @regCheck COLLATE latin1_bin;
0 xE001 REGEXP @regCheck COLLATE latin1_bin
0
Warnings:
Warning 1139 Regex error 'UTF-8 error: 1 byte missing at end'
SELECT 0 xE001 REGEXP CAST(@regCheck AS CHAR);
0 xE001 REGEXP CAST(@regCheck AS CHAR)
0
Warnings:
Warning 1139 Regex error 'UTF-8 error: 1 byte missing at end'
# Since 11 .5 (MDEV-25829 ) user variables have DERIVATION_COERCIBLE
# so a user variable and a literal in the pattern gave equal results
# But since 11 .6 (MDEV-35041 ) user variables have DERIVATION_USERVAR
# so the query with a literal is performed as binary:
SELECT 0 xE001 REGEXP '\\xE0\\x01' AS c1;
c1
1
# while the query with a user variable is performed as string
# with a warning, like in 11 .4
SET @regCheck= '\\xE0\\x01' ;
SELECT 0 xE001 REGEXP @regCheck AS c2;
c2
0
Warnings:
Warning 1139 Regex error 'UTF-8 error: 1 byte missing at end'
# Testing workaround N1: This makes the pattern to be a binary string:
SET NAMES latin1;
SET @regCheck= X'E001' ;
SELECT 0 xE001 REGEXP @regCheck;
0 xE001 REGEXP @regCheck
1
# Testing workaround N2: This also makes the pattern to be a binary string, using a different syntax:
SET NAMES latin1;
SET @regCheck= _binary '\\xE0\\x01' ;
SELECT 0 xE001 REGEXP @regCheck;
0 xE001 REGEXP @regCheck
1
# Testing workaround N3: This makes derivation of the subject string stronger (IMLICIT instead of COERCIBLE)
SET NAMES latin1;
SET @regCheck= '\\xE0\\x01' ;
SELECT CAST(0 xE001 AS BINARY) REGEXP @regCheck;
CAST(0 xE001 AS BINARY) REGEXP @regCheck
1
# MDEV-12420 : Testing recursion overflow
SELECT 1 FROM dual WHERE ('Alpha,Bravo,Charlie,Delta,Echo,Foxtrot,StrataCentral,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,StrataL3,November,Oscar,StrataL2,Sand,P3,P4SwitchTest,Arsys,Poppa,ExtensionMgr,Arp,Quebec,Romeo,StrataApiV2,PtReyes,Sierra,SandAcl,Arrow,Artools,BridgeTest,Tango,SandT,PAlaska,Namespace,Agent,Qos,PatchPanel,ProjectReport,Ark,Gimp,Agent,SliceAgent,Arnet,Bgp,Ale,Tommy,Central,AsicPktTestLib,Hsc,SandL3,Abuild,Pca9555,Standby,ControllerDut,CalSys,SandLib,Sb820,PointV2,BfnLib,Evpn,BfnSdk,Sflow,ManagementActive,AutoTest,GatedTest,Bgp,Sand,xinetd,BfnAgentLib,bf-utils,Hello,BfnState,Eos,Artest,Qos,Scd,ThermoMgr,Uniform,EosUtils,Eb,FanController,Central,BfnL3,BfnL2,tcp_wrappers,Victor,Environment,Route,Failover,Whiskey,Xray,Gimp,BfnFixed,Strata,SoCal,XApi,Msrp,XpProfile,tcpdump,PatchPanel,ArosTest,FhTest,Arbus,XpAcl,MacConc,XpApi,telnet,QosTest,Alpha2,BfnVlan,Stp,VxlanControllerTest,MplsAgent,Bravo2,Lanz,BfnMbb,Intf,XCtrl,Unicast,SandTunnel,L3Unicast,Ipsec,MplsTest,Rsvp,EthIntf,StageMgr,Sol,MplsUtils,Nat,Ira,P4NamespaceDut,Counters,Charlie2,Aqlc,Mlag,Power,OpenFlow,Lag,RestApi,BfdTest,strongs,Sfa,CEosUtils,Adt746,MaintenanceMode,MlagDut,EosImage,IpEth,MultiProtocol,Launcher,Max3179,Snmp,Acl,IpEthTest,PhyEee,bf-syslibs,tacc,XpL2,p4-ar-switch,p4-bf-switch,LdpTest,BfnPhy,Mirroring,Phy6,Ptp' REGEXP '^((?!\b(Strata|StrataApi|StrataApiV2)\b).)*$' );
SELECT REGEXP_INSTR('a_kollision' , 'oll' );
REGEXP_INSTR('a_kollision' , 'oll' )
4
SELECT REGEXP_INSTR('a_kollision' , '(oll)' );
REGEXP_INSTR('a_kollision' , '(oll)' )
4
SELECT REGEXP_INSTR('a_kollision' , 'o([lm])\\1' );
REGEXP_INSTR('a_kollision' , 'o([lm])\\1' )
4
SELECT a FROM (SELECT "aa" a) t WHERE a REGEXP '[0-9]' ;
a
#
# MDEV-11777 REGEXP_REPLACE converts utf8mb4 supplementary characters to '?'
#
select hex(regexp_replace(cast(x'F09F9881' as char character set 'utf8mb4' ), _utf8mb4'a' , _utf8mb4'b' )) as Text;
Text
F09F9881
#
# End of 10 .6 tests
#
Messung V0.5 in Prozent C=72 H=100 G=86
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland