Mysql 的正则表达式简介

Mysql 的正则表达式


匹配文本,将一个模式与文本进行比较

例如:

select name_s
from pros
where name_s regexp '1000' //表示包含1000的所有行 s1000也是
order by name_s;
  • .是正则表达式语言中的任意匹配一个字符的意思
    select *
    from emp
    where name_s regexp 'A.' //不区分大小写
    order by name_s;
    
    where name_s regexp binary 'a.' //区分大小写
    

1. 进行or匹配

为了搜索两个串之一(两种串我都要) |

select * from emp where name_s REGEXP 'a|c' ORDER by name_s; ///有a或有c

2. 匹配几个字符之一

匹配单一字符。但是,如果想要特定字符就需要[]

select prod_name from products
WHERE prod_name REGEXP '[123] Ton' # 从123中的任意一个 类似[1|2|3]
select prod_name from products
WHERE prod_name REGEXP '[^123] Ton' # 除了123以外

select prod_name from products
WHERE prod_name REGEXP '1|2|3 Ton' #注意这里是 1 | 2 | 3 Ton

3. 匹配范围

  • -号替换
[1-3] = [123] 这两个相同
[a-z] = [a...z]

4. 使用特殊字符

.我们要使用的话

  • \\前导这个就可以了
select * from products 
WHERE prod_name REGEXP '\\.'
select * from products 
WHERE prod_name REGEXP '[\\t]' --空格
说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9]
元 字 符 说 明
+ 1个或多个匹配(等于{1,})
* 0个或多个匹配
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)

样例:

SELECT * from products
WHERE prod_name Regexp '[[:digit:]]{4}'
order by prod_name

Query result 2 rows!

prod_id vend_id prod_name prod_price prod_desc
JP1000 1005 JetPack 1000 35 JetPack 1000, intended for single use
JP2000 1005 JetPack 2000 55 JetPack 2000, multi-use
模式 描述
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
[…] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^…] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
SELECT *
from products
WHERE prod_name
Regexp '\\([0-9] stic.{0,1}\\)'
order by prod_name
发布了74 篇原创文章 · 获赞 29 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ClonH/article/details/104613351