next up previous contents
Next: 實機操作練習題 Up: Clause 紀錄詢問條件 Previous: NULL 值   Contents

REGEXP 正規表示

  1. 查詢時雖可以使 LIKE ...% 搜尋符合的紀錄,但對於例如開頭為數字的字串就無法滿足。MySQL 支援正規表示法,只要使用 REGEXP 就可以使用正規表示查詢,非常方便。正規表示運算如下:
    RE字符         意義與範例
    ^word    待搜尋的字串(word)在行首。
             #範例:grep -n '^#' re.txt
             搜尋行首為 # 開始的那一行。
    word$    待搜尋的字串(word)在行尾。
             #範例:grep -n '!$' re.txt
             將行尾為 ! 的那一行列印出來。
      .      代表『任意一個』字符,一定是一個任意字符。
             #範例:grep -n 'e.e' re.txt
             搜尋的字串可以是 (eve) (eae) (eee) (e e), 但不能僅有 (ee)。
             亦即 e 與 e 中間『一定』僅有一個字元,而空白字元也是字元。
      \      跳脫字符,將特殊符號的特殊意義去除。
             #範例:grep -n \' re.txt
             搜尋含有單引號 ' 的那一行。
      *      重複零個或多個的前一個 RE 字符
             #範例:grep -n 'ess*' re.txt
             找出含有 (es) (ess) (esss) 等等的字串。
    {n,m}  連續 n 到 m 個的『前一個 RE 字符』
             若為 {n} 則是連續 n 個的前一個 RE 字符,
             若是 {n,} 則是連續 n 個以上的前一個 RE 字符。
             #範例:grep -n 'go{2,3}g' re.txt
             在 g 與 g 之間有 2 個到 3 個的 o 存在的字串,亦即 (goog)(gooog)
      [ ]    在 [ ] 當中『謹代表一個待搜尋的字元』
             #範例:grep -n 'g[ld]' re.txt
             搜尋含有 (gl) 或 (gd) 的那一行
             #範例:grep -n '[0-9]' re.txt
             搜尋含有任意數字的那一行。
             在字元集合 [ ] 中的減號 - 是代表兩個字元之間的所有連續字元。
             [^]:^ 在 [ ] 內時, 代表的意義是『反向選擇』
             #範例:grep -n 'oo[^t]' re.txt
             搜尋的字串可以是 (oog) (ood) 但不能是 (oot)。 
      +      重複『一個或一個以上』的前一個 RE 字符
             #範例:egrep -n 'go+d' re.txt
             搜尋 (god) (good) (goood)... 等等的字串。
      ?     『零個或一個』的前一個 RE 字符
             #範例:egrep -n 'go?d' re.txt
             搜尋 (gd) (god) 這兩個字串。
      |      用或( or )的方式找出數個字串
             #範例:egrep -n 'gd|good|dog' re.txt
             搜尋 gd 、 good 或 dog 這三個字串。 
     ( )     找出『群組』字串或作為『多個重複群組』的判別
             #範例:egrep -n 'g(la|oo)d' 
             搜尋 (glad) 或 (good) 這兩個字串。
             #範例:egrep -n 'A(xyz)+C' re.txt
             找開頭是 A 結尾是 C ,中間有一個以上的 "xyz" 字串。
    
  2. 先列出資料表 docunt_tbl 中的所有紀錄。
    [root@kvm8 ~]# mysql -s -uroot -p123qwe
    mysql> use dyw;
    mysql> select * from dcount_tbl;
    dyw_author	dyw_count
    dywang	4
    linda	3
    peter	2
    rita	1
    jenny	NULL
    sara	NULL
    
  3. 列出資料表 docunt_tbldyw_author 以 l 開頭的紀錄。
    mysql> select * from dcount_tbl where dyw_author regexp '^l';
    dyw_author	dyw_count
    linda	3
    
  4. 列出資料表 docunt_tbldyw_author 以 a 結尾的紀錄。
    mysql> select * from dcount_tbl where dyw_author regexp 'a$';
    dyw_author	dyw_count
    linda	3
    rita	1
    sara	NULL
    
  5. 列出資料表 docunt_tbldyw_author 以 l,p,r 開頭的紀錄。
    mysql> select * from dcount_tbl where dyw_author regexp '^[lpr]';
    dyw_author	dyw_count
    linda	3
    peter	2
    rita	1
    
  6. 列出資料表 docunt_tbldyw_author 以 l,r 開頭或包含 ra 字串的紀錄。
    mysql> select * from dcount_tbl where dyw_author regexp '^[lp]|ra';
    dyw_author	dyw_count
    linda	3
    peter	2
    sara	NULL
    



2018-06-19