sql select(语句) (where)正则表达式

sql select(语句) (where)正则表达式

正则表达式介绍:正则表达式是用来匹配文本的特殊的串(字符集合)。

所有种类的程序设计语言,文本编译器,操作系统等都支持正则表达式。

  1. 使用MySQL正则表达式
1. 基本字符匹配
SELECT * FROM ms_user WHERE name REGEXP 'wz.';
除关键字 LIKE 的语句被REGEXP替代外,这条语句看上去非常像LIKE的语句。
LIKE : 是告诉MySQL,后边跟的是通配符。
同理
REGEXP :就是告诉MySQL,后边跟的是正则表达式。

SELECT * FROM ms_user WHERE name REGEXP 'wzy';
SELECT * FROM ms_user WHERE name LIKE 'wzy';
注:比较上述语句。LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会返回(除非使用通配符),而REGEXP可以
  1. 进行 OR 匹配 ‘ | ’
SELECT * FROM ms_user WHERE name REGEXP 'wang|ze';
# 这条语句功能与 or语句类似  相当于 WHERE name = 'wang' or name = 'ze';
  1. 匹配几个字符之一

    匹配任何单一字符,如果你只想匹配特定得字符,那我们通过 [ 和 ] 括起来指定的字符来完成;
    例: SELECT * FROM ms_user WHERE name REGEXP '[123]lala';
    #这里[123] 的意思就是 匹配 以 1,2,3开头其中之一的 lala 字符串。1lala,2lala,3lala
    注: [123] 的意思是[1|2|3] 需要加上[] 如果不加,意思就会改变成 1 or 2 or 3lala
    
    字符集也可以被否定 ,我们只需要在集合前加上一个 ^  [^123], 这应 [^123]lala就会得到与上边相反的结果。
    
  2. 匹配范围

    当匹配的特定字符很多的时候我们会很麻烦,如匹配[0123456789];
    此时我们可以使用 '-' 
    例: [0-9] 可以起到与[123456789]相同的效果;
    注: 范围不限定于完整的集合,[1-3]和[5-8] 也是合法的,此外,范围不一定只是数值,[a-z]匹配任意字母字符。
    
  3. 匹配特殊字符

    当我们匹配在程序语言中表达特殊意义的字符时(如:|,[,],-)是我们需要用到\\ ,如 \\- 表示 - ,\\[ 表示[,及当我们要表达 \ 时 我们需要用 \\\;
    
     \\ 也可以用来引用元字符(具有特殊含义的字符);
                         元字符                 说明
                          \\f				  换页		
                          \\n                  换行                     
    					 \\r				回车
                           \\t				  制表
                           \\v                 纵向制表  
                                                                  
      注: 多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本省,但MySQL要求使用两个反斜杠(MySQL自己解释一个,正则表达式库解释一个)。
    
  4. 匹配字符集

    正则表达式有预定字符集:

           类                              说明
        [:alnm:]			   		任意字母和数字[a-zA-Z0-9]
        [:alpha:]					[a-zA-Z]任意字母
        [:blank:]					[\\t] 空格和制表
        [:cntrl:] 					ASCII控制字符(ASCII 0到37和127)
        [:digit:]					任意数字[0-9]
        [:graph:]					同[:print:]但不包含空格
        [:lower:]                     [a-z] 任意小写字母
        [:print:]					任意可打印字符
        [:punct:]                     [:alnm:][:cntrl:]除外的字符
        [:space:]                     包括空格的任意空白字符[\\f\\n\\r\\t\\v]
        [:upper:]					任意大写字母[A-Z]
        [:xdigit:]					任意16进制数字[a-fA-F0-9]
    
  5. 匹配多个实例

    上述到现在,我们知道的都是如何匹配单个字符的,我们可以使用一些元字符来匹配多个字符
    
    	元字符					说明
    	*					0个或多个
    	+					1个或多个
    	?				    0个或一个
    	{n}					指定数目匹配
    	{n,}				不少于自定数目的匹配
    	{n,m}				匹配数目范围(m不超过255)
    	
    例: 	SELECT * FROM ms_user WHERE name REGEXP '\\([0-9] wzy?\\)';
    \\([0-9] wzy?\\) 其中 \\(和\\)表示匹配括号,[0-9] 表示任意数字, wzy? 表示匹配 wz,wzy;
    ?的意义是匹配它前边的任何字符的0次或1次。
    
    例: SELECT * FROM ms_user WHERE name REGEXP '[[0-9]]{5}';
     匹配任意数 5 次 ,如:12345 56789 54687 01244;
     
    
  6. 定位符

    目前所知,所有例子都是匹配一个子串中任意位置的文本,为了匹配特定位置的文本,我们可以使用定位符。
    
    	定位符				说明
    	^				文本的开始
    	$				文本的结束
    	[[:<:]]			 词的开始
    	[[:>:]]			 词的结尾
    	
    例: SELECT * FROM ms_user WHERE name REGEXP '^[0-9\\.]';
    匹配 name 以 0-9 或 . 开头的数据。
    
    注: ^ 的双重用途, 在[]外百世文本的开始,在[] 中表示否定该集合
    
发布了28 篇原创文章 · 获赞 1 · 访问量 586

猜你喜欢

转载自blog.csdn.net/qq_41911729/article/details/104451695