Mysql(四)正则表达式
一、正则表达式
1、使用like可以进行不确定的查询(模糊查询),然而,模糊 查询的功能有限,当需要进行更加复杂的模式匹配时,可以 使用正则表达式来完成。
2、正则表达式可以对指定的字符串与模式之间执行模式匹配。 模式可以是普通的字符串,也可以是含有特殊意义字符的字 符串。
3、MySQL中,正则表达式使用regexp或rlike关键字。二者为同 义词。
4、regexp左侧操作数为要匹配的字符串,而右侧操作数为匹配 模式。当左侧字符串能够成功匹配右侧的模式时,返回1 ( true),否则返回0( false)。
5、右侧操作数(模式)可以是简单的常量字符串,也可以含有 特殊意义的字符。当含有特殊意义字符时,可以进行功能非 常强大的匹配 。
二、正则表达式可以含有以下特殊字符:
^ 从字符串开头进行匹配
$ 匹配字符串结尾
. 匹配任意一个字符
? 前面的字符出现0次或1次。
+ 前面的字符出现1次或多次。
* 前面的字符出现0次或多次。
() 表示一个整体。
[] 对[]内的任意一个字符进行匹配。如果含有”-”,则对字符 区间的任意字符进行匹配。
[^] 不含有[]内的所有字符或区间。
| 匹配|分隔的任意一个字符。
{m} 对{}前面的字符匹配m次。
{m,n}对{}前面的字符匹配m到n次,包括边界值。
{m,}对{}前面的字符匹配m到多次。
说明:
m需要小于等于n。
,之间不能存在空格。
/*正则表达式 字符串 regexp 模式 正式表达式可以进行模式的匹配,如果左边字符串可以匹配右边 的模式,返回1(true),否则返回0(false)。 模式可以是常规的字符串,也可以含有特殊字符(可以进行复杂的匹配)。 */ select 'abc' regexp 'ab'; select 'abc' regexp 'bc'; #^从开头进行匹配 select 'abc' regexp '^ab'; select 'abc' regexp '^bc'; #$匹配字符串末尾 select 'abc' regexp 'ab$'; select 'abc' regexp 'bc$'; #^与$联合使用 select 'abc' regexp '^abc$'; #.匹配任意一个字符 select 'abc' regexp '^a.c$'; select 'ac' regexp '^a.c$'; #?匹配前面字符0次或1次。 select 'abc' regexp '^ab?c$' select 'ac' regexp '^ab?c$' select 'abbc' regexp '^ab?c$' #+匹配前面字符1次或多次。 select 'abc' regexp '^ab+c$' select 'abbbc' regexp '^ab+c$' select 'ac' regexp '^ab+c$' #*匹配前面字符0次或多次 select 'ac' regexp '^ab*c$' select 'abc' regexp '^ab*c$' select 'abbbbc' regexp '^ab*c$' #()表示一个整体。 select 'ac' regexp '^(ab)?c$'; select 'c' regexp '^(ab)?c$'; select 'ababc' regexp '^(ab)?c$'; select 'ababc' regexp '^(ab)+c$'; #[]对其中的任意一个字符进行匹配,仅能匹配一个字符。 select 'abc' regexp '^a[abcdefg]c$'; #仅能匹配一个字符 select 'abgc' regexp '^a[abcdefg]c$'; #[]内可以使用-表示一个区间,表示匹配区间内的任意一个字符。 #包括区间的边界。 select 'abc' regexp '^a[a-k]c$'; select 'a3c' regexp '^a[0-5]c$'; #如果[]内需要匹配],则]必须紧跟在[之后。 select 'a]c' regexp '^a[ab]c]c$' select 'a]c' regexp '^a[]abc]c$' #如果[]内需要匹配-,则-必须出现在[]的两端(开始或结束)。 select 'a-c' regexp '^a[a-kx]c$' select 'a-c' regexp '^a[-akx]c$' select 'a-c' regexp '^a[akx-]c$' #[^] 不含有区间内的任意一个字符 select 'abdsfsdf' regexp '^[^0-9]+$' select 'abd5sfsdf' regexp '^[^0-9]+$' #| 匹配|分隔的任意一个字符 select 'abc' regexp '^a(b|c|d)c$' select 'adc' regexp '^a(b|c|d)c$' select 'abc' regexp '^a[b-d]c$' #{m} 匹配前面的字符m次 select 'abc' regexp '^ab{3}c$' select 'abbbc' regexp '^ab{3}c$' #{m,n} 匹配前面的字符m次到n次,包含m与n。 select 'abc' regexp '^ab{2,5}c$' select 'abbbc' regexp '^ab{2,5}c$' #{m,} 匹配前面的字符m次或更多次。 select 'abc' regexp '^ab{2,}c$' select 'abbc' regexp '^ab{2,}c$' select 'abbbbbbc' regexp '^ab{2,}c$' #?,*,+也可以使用{m,n}实现。 select 'abc' regexp '^ab?c$' select 'abc' regexp '^ab{0,1}c$'; select 'abc' regexp '^ab+c$' select 'abc' regexp '^ab{1,}c$'; select 'abc' regexp '^ab*c$' select 'abc' regexp '^ab{0,}c$'; #{m,n} m需要小于等于n select 'abc' regexp '^ab{1,0}c$'; #{m,n}不要含有空格 select 'abc' regexp '^ab{0 , 1}c$';