一、正則表達式
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$';
