国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql正則REGEXP學習練習筆記

2024-07-24 12:36:56
字體:
來源:轉載
供稿:網友

REGEXP在mysql是用來執行正則表達式的一個函數,像php中的preg之類的函數了,regexp正則函數如果只是簡單的查詢使用like即可,但復雜的還是需要使用regexp了,下面我們來看看.

MySql用戶手冊建議,在構造簡單查詢時,仍使用通配符.如:Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_","?someletter"];

但在一些特殊查詢中,不用正則表達式是不行的,MYSQL提供的正則表達式WHERE謂詞有三個,分別是:REGEXP, RLIKE, NOT RLIKE

用這三個替換原有的LIKE謂詞,后面即可以跟正則表達式,例如要查詢字段中含有“_”的數據,則要用以下查詢語句:

SELECT * FROM TABLENAME WHERE FIELDNAME RLIKE '.[_].';

擴展正則表達式的一些字符是:

· ‘.’匹配任何單個的字符.

· 字符類“[...]”匹配在方括號內的任何字符,例如,“[abc]”匹配“a”、“b”或“c”。為了命名字符的范圍,使用一個“-”,“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字.

· “ * ”匹配零個或多個在它前面的字符,例如,“x*”匹配任何數量的“x”字符,“[0-9]*”匹配任何數量的數字,而“.*”匹配任何數量的任何字符.

如果REGEXP模式與被測試值的任何地方匹配,模式就匹配(這不同于LIKE模式匹配,只有與整個值匹配,模式才匹配)。

為了定位一個模式以便它必須匹配被測試值的開始或結尾,在模式開始處使用“^”或在模式的結尾用“$”.

為了找出以“b”開頭的名字,使用“^”匹配名字的開始,使用正則:

  1. SELECT * FROM pet WHERE name REGEXP BINARY ‘^b’; 
  2. SELECT * FROM pet WHERE name REGEXP ‘fy$’; 
  3. SELECT * FROM pet WHERE name REGEXP ‘w’; 
  4. SELECT * FROM pet WHERE name REGEXP ‘^…..$’; 
  5. SELECT * FROM pet WHERE name REGEXP ‘^.{5}$’; 

今天在應用中遇到了這樣的一個問題,有一個字段 t1,其中的值類似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2.

需要從里面搜索出比如說,第一個逗號前的數字范圍為3-5之間,第三個逗號前的數字的范圍為3-5之間,第10個逗號前的數字范圍為3-5之間,其余的都為1-5之間.

則sql語句可以這么寫:SELECT * FROM tb WHERE t1 REGEXP '^[3-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5]%';

1. 使用LIKE和NOT LIKE比較操作符(注意不能使用=或!=);

2. 模式默認是忽略大小寫的;

3. 允許使用”_”匹配任何單個字符,”%”匹配任意數目字符(包括零字符);

附一些mysql正則規則

^      匹配字符串的開始部分

$      匹配字符串的結束部分

.      匹配任何字符(包括回車和新行)

a*     匹配0或多個a字符的任何序列

a+     匹配1個或多個a字符的任何序列

a?     匹配0個或1個a字符

de|abc    匹配序列de或abc

(abc)*     匹配序列adc的0個或者多個實例

{n}、{m,n}    {n}或{m,n}符號提供了編寫正則表達式的更通用方式,能夠匹配模式的很多前述原子(或“部分”),m和n均為整數.

a*       可被寫為a{0,}

a+       可被寫為a{1,}

a?       可被寫為a{0,1}

[a-dX]      匹配任何是a,b,c,d或者X的字符,兩個其他字符之間的’-'字符構成一個范圍

[^a-dX]    匹配任何不是a,b,c,d或者X的字符,前面的字符’^'是否定的意思.

[.characters.]  在括號表達式中(使用[和]),匹配用于校對元素的字符序列,字符為單個字符或新行等字符名.

  1. mysql> SELECT ‘~’ REGEXP ‘[[.~.]]’;                                                        -> 1 
  2. mysql> SELECT ‘~’ REGEXP ‘[[.tilde.]]’;                                                 -> 1 
  3.  
  4. [=character_class=] 

在括號表達式中(使用[和]),[=character_class=]表示等同類,它與具有相同校對值的所有字符匹配,包括它本身.

[[=a=]]  等同于[a(+)],[a+],[a{1,}]

[:character_class:],在括號表達式中(使用[和]),[:character_class:]表示與術語類的所有字符匹配的字符類.

標準的類名稱是:

  1. alnum       文字數字字符 
  2. alpha        文字字符 
  3. blank         空白字符 
  4. cntrl          控制字符 
  5. digit          數字字符 
  6. graph        圖形字符 
  7. lower        小寫文字字符 
  8. print          圖形或空格字符 
  9. punct        標點字符 
  10. space        空格、制表符、新行、和回車 
  11. upper        大寫文字字符 
  12. xdigit        十六進制數字字符  //Vevb.com 

[[:<:]], [[:>:]]:這些標記表示word邊界,它們分別與word的開始和結束匹配,word是一系列字字符,其前面和后面均沒有字字符,字符是alnum類中的字母數字字符或下劃線(_).

  1. mysql> select ‘fang shan zi’ regexp ‘[[:<:]]shan[[:>:]]’;             -> 1 
  2. mysql> select ‘fang shan zi’ regexp ‘[[:<:]]fang[[:>:]]’;              -> 1 
  3. mysql> select ‘fang shans zi’ regexp ‘[[:<:]]shan[[:>:]]’;           -> 0 

正則表達式使用特殊字符,應在其前面加上2個反斜杠’'字符:

  1. mysql> SELECT ’1+2′ REGEXP ’1+2′;                       -> 0 
  2. mysql> SELECT ’1+2′ REGEXP ’1+2′;                      -> 0 
  3. mysql> SELECT ’1+2′ REGEXP ’1/+2′;                     -> 1

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陈巴尔虎旗| 汝南县| 宜兴市| 项城市| 大邑县| 太和县| 东乡族自治县| 花莲县| 图们市| 同江市| 克东县| 红原县| 高尔夫| 晴隆县| 阿拉尔市| 襄汾县| 桂平市| 体育| 惠东县| 二连浩特市| 马龙县| 温州市| 新和县| 尉犁县| 徐汇区| 建瓯市| 德兴市| 简阳市| 札达县| 额敏县| 台东县| 施甸县| 岱山县| 和田市| 建阳市| 建湖县| 黄平县| 怀集县| 遵义市| 广元市| 玉林市|