MySQL8.0暂时支持如下几种正则表达式函数,本文只是抛砖引玉,更多内容请参考MySQL手册。
Name | Description |
---|---|
NOT REGEXP |
Negation of REGEXP |
REGEXP |
Whether string matches regular expression |
REGEXP_INSTR() |
Starting index of substring matching regular expression |
REGEXP_LIKE() |
Whether string matches regular expression |
REGEXP_REPLACE() |
Replace substrings matching regular expression |
REGEXP_SUBSTR() |
Return substring matching regular expression |
RLIKE |
Whether string matches regular expression |
regexp、rlike、regexp_like()三者功能相同,只是写法不同
not regexp是否定形式
mysql> select 'abc' regexp '^a'; +-------------------+ | 'abc' regexp '^a' | +-------------------+ | 1 | +-------------------+ 1 row in set (0.00 sec) mysql> select 'abc' rlike '^a'; +------------------+ | 'abc' rlike '^a' | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) mysql> select regexp_like('abc','^a'); +-------------------------+ | regexp_like('abc','^a') | +-------------------------+ | 1 | +-------------------------+ 1 row in set (0.00 sec) mysql> select 'abc' not regexp '^a'; +-----------------------+ | 'abc' not regexp '^a' | +-----------------------+ | 0 | +-----------------------+ 1 row in set (0.00 sec) mysql> select not regexp_like('abc','^a'); +-----------------------------+ | not regexp_like('abc','^a') | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set (0.00 sec)
regexp_replace()替代函数
mysql> select regexp_replace('a1,b2,c3','[a-z]{1}','b'); +-------------------------------------------+ | regexp_replace('a1,b2,c3','[a-z]{1}','b') | +-------------------------------------------+ | b1,b2,b3 | +-------------------------------------------+ 1 row in set (0.00 sec) mysql> select regexp_replace('aaa,b2,c3','[a-z]{2}','d'); +--------------------------------------------+ | regexp_replace('aaa,b2,c3','[a-z]{2}','d') | +--------------------------------------------+ | da,b2,c3 | +--------------------------------------------+ 1 row in set (0.00 sec)
regexp_substr() 截断字符串
mysql> select regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,1); +-----------------------------------------------------+ | regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,1) | +-----------------------------------------------------+ | a1 | +-----------------------------------------------------+ 1 row in set (0.00 sec) mysql> select regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,2); +-----------------------------------------------------+ | regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,2) | +-----------------------------------------------------+ | b1 | +-----------------------------------------------------+ 1 row in set (0.00 sec) mysql> select regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,3); +-----------------------------------------------------+ | regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,3) | +-----------------------------------------------------+ | c1 | +-----------------------------------------------------+ 1 row in set (0.00 sec) mysql> select regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,4); +-----------------------------------------------------+ | regexp_substr('a1,b1,c1,ddds','[a-z 0-9]{1,9}',1,4) | +-----------------------------------------------------+ | ddds | +-----------------------------------------------------+ 1 row in set (0.00 sec)
regexp_instr() 返回匹配的字符串开始位置index.
mysql> select regexp_instr('dogcatdog','dog',1); +-----------------------------------+ | regexp_instr('dogcatdog','dog',1) | +-----------------------------------+ | 1 | +-----------------------------------+ 1 row in set (0.00 sec) mysql> select regexp_instr('dogcatdog','dog',2); +-----------------------------------+ | regexp_instr('dogcatdog','dog',2) | +-----------------------------------+ | 7 | +-----------------------------------+ 1 row in set (0.00 sec) mysql> select regexp_instr('a aa aaa aaaa','a{3}',1); +----------------------------------------+ | regexp_instr('a aa aaa aaaa','a{3}',1) | +----------------------------------------+ | 6 | +----------------------------------------+ 1 row in set (0.00 sec)
更多内容请参考如下链接
12.5.2 Regular Expressions