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