mysql8で追加された正規表現の関数を勉強してみた
私はmysql初心者です。間違いなどありましたら、教えていただけるとありがたいです。
参考
https://dev.mysql.com/doc/refman/8.0/en/regexp.html
これらが8で追加されました
- REGEXP_LIKE()
- REGEXP_SUBSTR()
- REGEXP_REPLACE()
- REGEXP_INSTR()
REGEXP_LIKE(expr, pat[, match_type])
- 文字列
expr
がpat
で指定された正規表現と一致すると1
を返し、一致していなかったら0
を返す
-
expr
または pat
が NULL の場合、戻り値は NULL
match_type
-
c
: 大文字小文字を区別する
-
i
: 大文字小文字を区別しない
-
m
: 複数行モード、デフォルトだと文字列の最初と最後のみが^
や$
などに一致するが、これを指定すると\n
の前後も行の最初と最後として扱ってくれる
-
n
: 行の終端に.
がマッチする
-
u
: unixの行末のみにする、\n
は行末として扱われて\r\n
は扱われないようす
expr
がpat
で指定された正規表現と一致すると1
を返し、一致していなかったら0
を返すexpr
または pat
が NULL の場合、戻り値は NULL match_type
c
: 大文字小文字を区別するi
: 大文字小文字を区別しないm
: 複数行モード、デフォルトだと文字列の最初と最後のみが^
や$
などに一致するが、これを指定すると\n
の前後も行の最初と最後として扱ってくれるn
: 行の終端に.
がマッチするu
: unixの行末のみにする、\n
は行末として扱われて\r\n
は扱われないようす矛盾するオプションは右側が優先される。ci
だったらi
が有効になる。
select
regexp_like('abc', '[a-z]{3}') 一致
,regexp_like('ab', '[a-z]{3}') 不一致;
select
regexp_like('ABC', '[a-z]{3}', 'c') c大文字小文字区別する
,regexp_like('ABC', '[a-z]{3}', 'i') i大文字小文字区別しない
,regexp_like('aaa\nbbb', 'a$') mなし
,regexp_like('aaa\nbbb', '^b') mなし
,regexp_like('aaa\nbbb', 'a$', 'm') mあり
,regexp_like('aaa\nbbb', '^b', 'm') mあり
,regexp_like('a\nb', '...') nなし
,regexp_like('a\nb', '...', 'n') nあり
,regexp_like('a\r\nb', 'a$', 'm') uなしCRLF
,regexp_like('a\r\nb', 'a$', 'mu') uありCRLF
,regexp_like('a\nb', 'a$', 'm') uなしLF
,regexp_like('a\nb', 'a$', 'mu') uありLF;
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
- 文字列
expr
がpat
で指定された部分文字列を返す
-
expr
または pat
が NULL の場合、戻り値は NULL
-
pos
: 検索開始位置。デフォルトは1
-
occurrence
: 例えば3を指定したら3回目に出現した部分。デフォルトは1
-
match_type
: REGEXP_LIKEの説明と同じ
select
regexp_substr('abc def ghi', '[a-z]+') デフォルト
,regexp_substr('abc def ghi', '[a-z]+', 1) 1文字目から検索
,regexp_substr('abc def ghi', '[a-z]+', 5) 5文字目から検索
,regexp_substr('abc def ghi', '[a-z]+', 9) 9文字目から検索
,regexp_substr('abc def ghi', '[a-z]+', 1, 1) 1回目に出現
,regexp_substr('abc def ghi', '[a-z]+', 1, 2) 2回目に出現
,regexp_substr('abc def ghi', '[a-z]+', 1, 3) 3回目に出現
expr
がpat
で指定された部分文字列を返すexpr
または pat
が NULL の場合、戻り値は NULL pos
: 検索開始位置。デフォルトは1
occurrence
: 例えば3を指定したら3回目に出現した部分。デフォルトは1
match_type
: REGEXP_LIKEの説明と同じselect
regexp_substr('abc def ghi', '[a-z]+') デフォルト
,regexp_substr('abc def ghi', '[a-z]+', 1) 1文字目から検索
,regexp_substr('abc def ghi', '[a-z]+', 5) 5文字目から検索
,regexp_substr('abc def ghi', '[a-z]+', 9) 9文字目から検索
,regexp_substr('abc def ghi', '[a-z]+', 1, 1) 1回目に出現
,regexp_substr('abc def ghi', '[a-z]+', 1, 2) 2回目に出現
,regexp_substr('abc def ghi', '[a-z]+', 1, 3) 3回目に出現
REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
-
expr
の中で、pat
で指定された正規表現に一致する文字列を置換文字列 repl
で置換し、その結果の文字列を返す
-
expr
または pat
または repl
が NULL の場合、戻り値は NULL
- pos: T検索開始位置。デフォルトは
1
- occurrence: 例えば3を指定したら3回目に出現した部分のみ置換。デフォルトは
0
(0を指定すると一致する文字全て置換)
- match_type: REGEXP_LIKEの説明と同じ
select
regexp_replace('abc def ghi', '[a-z]+', 'xxx') デフォルト
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1) 1文字目から検索
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 5) 5文字目から検索
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 9) 9文字目から検索
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 0) 0は全て置換
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 1) 1回目を置換
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 2) 2回目を置換
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 3) 3回目を置換
expr
の中で、pat
で指定された正規表現に一致する文字列を置換文字列 repl
で置換し、その結果の文字列を返すexpr
または pat
または repl
が NULL の場合、戻り値は NULL 1
0
(0を指定すると一致する文字全て置換)select
regexp_replace('abc def ghi', '[a-z]+', 'xxx') デフォルト
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1) 1文字目から検索
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 5) 5文字目から検索
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 9) 9文字目から検索
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 0) 0は全て置換
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 1) 1回目を置換
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 2) 2回目を置換
,regexp_replace('abc def ghi', '[a-z]+', 'xxx', 1, 3) 3回目を置換
REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])
-
pat
で指定された正規表現に一致するexpr
の開始インデックスを返す
-
expr
または pat
が NULL の場合、戻り値は NULL
- 文字インデックスは 1 から
-
pos
: 検索開始位置。デフォルトは1
-
occurrence
: 例えば3を指定したら3回目に出現した部分。デフォルトは1
-
return_option
: 0を指定した場合、ッチした部分文字列の最初の文字の位置を返す。1を指定した場合、マッチした部分文字列の後の位置を返す。省略した場合、デフォルトは0
select
regexp_instr('abc def ghi', '[a-z]{3}') デフォルト
,regexp_instr('abc def ghi', '[a-z]{3}', 1) 1文字目から
,regexp_instr('abc def ghi', '[a-z]{3}', 2) 5文字目から
,regexp_instr('abc def ghi', '[a-z]{3}', 7) 9文字目から
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 1) 1回目に出現
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 2) 2回目に出現
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 3) 3回目に出現
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 1, 0) 一致した位置
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 1, 1) 一致した後の位置
pat
で指定された正規表現に一致するexpr
の開始インデックスを返すexpr
または pat
が NULL の場合、戻り値は NULL pos
: 検索開始位置。デフォルトは1
occurrence
: 例えば3を指定したら3回目に出現した部分。デフォルトは1
return_option
: 0を指定した場合、ッチした部分文字列の最初の文字の位置を返す。1を指定した場合、マッチした部分文字列の後の位置を返す。省略した場合、デフォルトは0
select
regexp_instr('abc def ghi', '[a-z]{3}') デフォルト
,regexp_instr('abc def ghi', '[a-z]{3}', 1) 1文字目から
,regexp_instr('abc def ghi', '[a-z]{3}', 2) 5文字目から
,regexp_instr('abc def ghi', '[a-z]{3}', 7) 9文字目から
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 1) 1回目に出現
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 2) 2回目に出現
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 3) 3回目に出現
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 1, 0) 一致した位置
,regexp_instr('abc def ghi', '[a-z]{3}', 1, 1, 1) 一致した後の位置
見ていただいてありがとうございましたm(_ _)m
Author And Source
この問題について(mysql8で追加された正規表現の関数を勉強してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/okumurakengo/items/b5bb7410d385819e8afa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .