1.基本字符的匹配
SELECT * FROM a1 WHERE name regexp '1000' #匹配名稱含有1000的所有行 SELECT * FROM a1 WHERE name regexp '.000' #匹配以000結尾的所有行,(.正則中表示:匹配任意一個字符)
從中可以看到正則表達式能夠模擬LIKE使用通配符,注意:在通配符能完成的時候就不用正則,因為正則可能慢點,當然正則也能簡化通配符,完成更大的作用。所以要有所取舍。
LIKE
與REGEXP
的區別:
SELECT * FROM a1 WHERE name LIKE 'a'SELECT * FROM a1 WHERE name regexp 'a'
下面兩條語句第一條不返回數據,第二條返回數據。
原因如下:
LIKE
匹配整個列值時,不會找到它,相應的行也不會被返回(除非使用通配符)
REGEXP
匹配時,會自動查找并返回結果。
那么REGEXP
也能匹配整個列值,使用^
和$
定位符即可!
匹配不區分大小寫
Mysql正則大小寫都會匹配,為區分大小寫可使用binary
關鍵字,如:
SELECT * FROM a1 WHERE name LIKE binary '%J%' #使用LIKE+通配符匹配大寫J SELECT * FROM a1 WHERE name regexp binary 'j' #使用正則匹配小寫j
2.進行OR
匹配
|
為正則表達式的OR
操作符,表示匹配其中之一
SELECT * FROM a1 WHERE name regexp binary 'a|j|G'
3.匹配特定字符
使用[]
括起來的字符,將會匹配其中任意單個字符。
SELECT * FROM a1 WHERE name regexp '[12]st'
以上'[12]st'正則表達式,[12]定義一組字符,它的意思是匹配1或2,因此結果如下:
正如所見,
[]
是另一種OR
語句,[123]st可以是[1|2|3]st的縮寫,也可以使用后者,注意:1|2|3 st
這樣不推薦,因為mysql會假定你的意思是匹配'1'或'2'或'3st'除非你把字符|
括在一個集合中,如:[1|2|3]st
字符也可以否定,加^
則意味著除此之外,如[^123]st
意思是匹配除了1st、2st、3st之外的數據。
4.匹配范圍
正則表達式可以使用
-
匹配一個范圍,如[0-9]
匹配任意數字,無論是1還是11還是10111,[a-z]
匹配任意小寫字母。
5.匹配特殊字符
如上,.
/-
/[]
等是正則表達式的特殊字符,如果要匹配含有這些字符的數據,就需要使用轉義(escaping),\\
。如\\.
表示查找'.'。\\
也用來引用元字符(具有特殊含義的字符),如:
\\f
:表示換頁
\\n
:表示換行
\\r
:表示回車
\\t
:表示制表
\\v
:表示縱向制表
Notes:
如果匹配反斜杠本身()則需要使用
\\\
為什么Mysql使用兩個反斜杠(\),而很多語言使用一個反斜杠轉義呢,因為mysql自己解釋一個,正則表達式庫解釋一個。
6.匹配字符串