MySQL 【正则表达式】函数大全

目录

1、 NOT REGEXP 操作符检查一个字符串和一个正则表达式是否不匹配。

2、NOT RLIKE 操作符检查一个字符串是否和一个正则表达式不匹配。

3、REGEXP 操作符检查一个字符串和一个正则表达式是否匹配。

4、REGEXP_INSTR() 函数从一个字符串中搜索和指定模式匹配的子串并返回的子串的索引。

5、REGEXP_LIKE() 函数检查一个字符串是否和一个正则表达式是否匹配

6、REGEXP_REPLACE() 函数在一个字符串中使用新内容替换一个和指定的正则表达式匹配的内容。

7、REGEXP_SUBSTR() 函数从一个字符串获取和指定模式匹配的子串并返回。

8、 RLIKE 操作符检查一个字符串和一个正则表达式是否匹配。


1、 NOT REGEXP 操作符检查一个字符串和一个正则表达式是否不匹配

str NOT REGEXP regexp

或者

 NOT (str REGEXP regexp)

如果字符串 str 和正则表达式 regexp 不匹配, NOT REGEXP 返回 1,否则 NOT REGEXP 返回 0

如果任意一个参数为 NULLNOT REGEXP 返回 NULL

SELECT
    'hello' NOT REGEXP '^[a-z]+$',
    'hello' NOT REGEXP '^[A-Z]+$',
    '12345' NOT REGEXP '[0-9]+$',
    '12345' NOT REGEXP '^\\d+$',
    '123ab' NOT REGEXP '^\\d*$',
    '123ab' NOT REGEXP '^.*$'

2、NOT RLIKE 操作符检查一个字符串是否和一个正则表达式不匹配

str NOT RLIKE regexp

或者

 NOT (str RLIKE regexp)

如果字符串 str 和正则表达式 regexp 不匹配, NOT RLIKE 返回 1,否则 NOT RLIKE 返回 0

如果任意一个参数为 NULLNOT RLIKE 返回 NULL

SELECT
    'hello' NOT RLIKE '^[a-z]+$',
    'hello' NOT RLIKE '^[A-Z]+$',
    '12345' NOT RLIKE '[0-9]+$',
    '12345' NOT RLIKE '^\\d+$',
    '123ab' NOT RLIKE '^\\d*$',
    '123ab' NOT RLIKE '^.*$'

3、REGEXP 操作符检查一个字符串和一个正则表达式是否匹配

REGEXP 操作符等同于 RLIKERLIKERLIKE 操作符和 REGEXP_LIKE()REGEXP_LIKE()REGEXP_LIKE() 函数。

 如果字符串 str 和正则表达式 regexp 匹配, REGEXP 返回 1,否则 REGEXP 返回 0

如果任意一个参数为 NULLREGEXP 返回 NULL

SELECT
    'hello' REGEXP '^[a-z]+$',
    'hello' REGEXP '^[A-Z]+$',
    '12345' REGEXP '[0-9]+$',
    '12345' REGEXP '^\\d+$',
    '123ab' REGEXP '^\\d*$',
    '123ab' REGEXP '^.*$'

4、REGEXP_INSTR() 函数从一个字符串中搜索和指定模式匹配的子串并返回的子串的索引。

REGEXP_INSTR(str, regexp)
REGEXP_INSTR(str, regexp, position)
REGEXP_INSTR(str, regexp, position, occurrence)
REGEXP_INSTR(str, regexp, position, occurrence, return_option)
REGEXP_INSTR(str, regexp, position, occurrence, return_option, mode)

str:必需的。一个字符串。

regexp:必需的。正则表达式。

position:可选的。开始搜索的起始位置。默认为 1

occurrence:可选的。第几次匹配的内容。默认为 1

return_option:可选的。指定返回哪一种位置索引。如果为 0,返回匹配的子串的第一个字符的位置索引;如果为 1,返回匹配的子串的后面的位置索引。默认为 0.

mode:可选的。执行匹配采用的模式。

匹配模式

  • c: 区分大小写
  • i: 不区分大小写
  • m: 多行匹配模式
  • n: 点 . 可以匹配行结束
  • u: 仅限 unix 行结尾

找出字符串 '123 abc 456 def' 中的第一组连续的数字的索引

SELECT REGEXP_INSTR('123 abc 456 def', '\\d+');

找出字符串 '123 abc 456 def' 中的第二组连续的数字

SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 2);

找出字符串 '123 abc 456 def' 中的第一组连续的数字的后面的索引

SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 1, 1);

5、REGEXP_LIKE() 函数检查一个字符串是否和一个正则表达式是否匹配

REGEXP_LIKE(str, regexp)
REGEXP_LIKE(str, regexp, mode)

str:必需的。一个字符串。

regexp:必需的。正则表达式。

mode:可选的。执行匹配采用的模式。

匹配模式

  • c: 区分大小写
  • i: 不区分大小写
  • m: 多行匹配模式
  • n: 点 . 可以匹配行结束
  • u: 仅限 unix 行结尾

如果字符串 str 和正则表达式 regexp 匹配, REGEXP_LIKE() 返回 1,否则 REGEXP_LIKE() 返回 0

如果 str 或者 regexp 为 NULLREGEXP_LIKE() 将返回 NULL

SELECT
    REGEXP_LIKE('hello', '^[a-z]+$'),
    REGEXP_LIKE('hello', '^[A-Z]+$'),
    REGEXP_LIKE('12345', '[0-9]+$'),
    REGEXP_LIKE('12345', '^\\d+$'),
    REGEXP_LIKE('123ab', '^\\d*$'),
    REGEXP_LIKE('123ab', '^.*$')

6、REGEXP_REPLACE() 函数在一个字符串中使用新内容替换一个和指定的正则表达式匹配的内容。

REGEXP_REPLACE(str, regexp, replacement)
REGEXP_REPLACE(str, regexp, replacement, position)
REGEXP_REPLACE(str, regexp, replacement, position, occurrence)
REGEXP_REPLACE(str, regexp, replacement, position, occurrence, mode)

str:必需的。一个字符串。

regexp:必需的。正则表达式。

replacement:必需的。用来替换的字符串。

position:可选的。开始搜索的起始位置。默认为从头开始。

occurrence:可选的。替换第几次匹配的内容。默认为替换所有匹配的内容。

mode:可选的。执行匹配采用的模式。

匹配模式

  • c: 区分大小写
  • i: 不区分大小写
  • m: 多行匹配模式
  • n: 点 . 可以匹配行结束
  • u: 仅限 unix 行结尾
SELECT REGEXP_REPLACE('123 abc 456 def', '\\s+', '-');

使用 X 只替换了第二次匹配的连续数字

SELECT REGEXP_REPLACE('123 abc 456 def', '\\d+', 'X', 1, 2);

7、REGEXP_SUBSTR() 函数从一个字符串获取和指定模式匹配的子串并返回。

REGEXP_SUBSTR(str, regexp)
REGEXP_SUBSTR(str, regexp, position)
REGEXP_SUBSTR(str, regexp, position, occurrence)
REGEXP_SUBSTR(str, regexp, position, occurrence, mode)

str:必需的。一个字符串。

regexp:必需的。正则表达式。

position:可选的。开始搜索的起始位置。默认为 1

occurrence:可选的。第几次匹配的内容。默认为 1

mode:可选的。执行匹配采用的模式。

匹配模式

  • c: 区分大小写
  • i: 不区分大小写
  • m: 多行匹配模式
  • n: 点 . 可以匹配行结束
  • u: 仅限 unix 行结尾
SELECT REGEXP_SUBSTR('123 abc 456 def', '\\d+');

找出字符串 '123 abc 456 def' 中的第二组连续的数字

SELECT REGEXP_SUBSTR('123 abc 456 def', '\\d+', 1, 2);

8、 RLIKE 操作符检查一个字符串和一个正则表达式是否匹配

RLIKE 操作符等同于 REGEXP
 操作符和 RLIKE_LIKE() 函数。

如果字符串 str 和正则表达式 regexp 匹配, RLIKE 返回 1,否则 RLIKE 返回 0

如果任意一个参数为 NULLRLIKE 返回 NULL

SELECT
    'hello' RLIKE '^[a-z]+$',
    'hello' RLIKE '^[A-Z]+$',
    '12345' RLIKE '[0-9]+$',
    '12345' RLIKE '^\\d+$',
    '123ab' RLIKE '^\\d*$',
    '123ab' RLIKE '^.*$'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值