mysql正規表示式匹配非 MySQL的正規表示式

2021-10-17 15:51:21 字數 1722 閱讀 5540

1.  mysql的正規表示式僅僅使sql語言的乙個子集,可以匹配基本的字元、字串。

例如:select * from wp_posts where post_name regexp 'hello',可以檢索出列post_name中所有包含hello的行

regexp '.og'  .是正規表示式中里乙個特殊的字元。它表示匹配乙個字元,因此,dog,hog,mog等等都能匹配。

注意:關於like和regexp的區別:like匹配整個列。如果被匹配的文字僅在列值**現,like並不會找到它,相應的行也不會返回(當然,使用萬用字元除外)。而regexp在列值內進行匹配,如果被匹配的匹配的文字在列值**現,regexp將會找到它,相應的行將被返回,這時乙個非常重要的差別(當然,如果適應定位符號^和$,可以實現regexp匹配整個列而不是列的子集)。

關於大小寫的區分:mysql中正規表示式匹配(從版本3.23.4後)不區分大小寫 。如果要區分大小寫,應該使用binary關鍵字,如where post_name regexp binary 'hello .000'

2.關於or匹配

為了搜尋兩個串之一,使用|, 如,select * from products where pro_id regexp '1000|2000'  order by pro_id;

這樣就1000和2000都能匹配並返回,當然,使用多個|就可以匹配多個串

3.只是匹配幾個字元[]

例如,這樣將要匹配[0123456789]可以匹配0到9,[1-4][4-9]也是合法的範圍。此外,範圍不一定只是數值的,[a-z]匹配任意字母字元

如:select prod_name from products where prod_name regexp '[1-5] ton' order by prod_name;

4.匹配特殊字元使用\進行轉義

\\.能夠匹配.

\\f換頁

\\n換行

\\r回車

\\t製表

\\縱向製表

注意:為了匹配\本身,需要使用\\\

5.匹配字元類

[:alnum:]    任意字母和數字(通[a-za-z0-9])

[:alpha:]     任意字元(同[a-za-z])

[:blank:]    空格和製表符(同[\\t])

[:digit:]     任意數字(同[0-9])

[:lower:]  任意小寫字母

[:upper:]   任意大寫字母

[:space:]   包括空格在內的任意空白字元

6.匹配多個例項,關於重複元字元

*      0個或者多個匹配

+     1個或者多個匹配(等於)

?     1個或者多個匹配(等於)

指定數目的匹配

不少於指定數目的匹配

匹配數目的範圍(m不超過255)

例子:  select prod_name from products where prod_name regexp '[[:digit:]]'   ,如前所述,[:digit:]匹配任意素子,因而它為數字的乙個幾何。確切的要求它前面的字元(任意數字)出現3此,所以[[:digit:]]匹配連在一起的任意4位數字,當然,上面的例子也可以這樣寫regexp '[0-9][0-9][0-9][0-9]'

7.定位符

^  文字的開始

&  文字的結尾

[[:>:]]   詞的結尾

通過使用這些定位符,能夠使regexp起類似like的作用

正規表示式 非貪婪匹配

先來看個例子 final static string text 999www.chinoukin.com 888 final static string regex public static void main string args 預想輸出結果 999 b 888 b 實際輸出結果 999 b...

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...