日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

6/7 SELECT语句:过滤(正则表达式REGEXP)

發布時間:2024/1/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6/7 SELECT语句:过滤(正则表达式REGEXP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
序號說明操作
1REGEXP(正則表達式)LIKE替換成REGEXP
2匹配任意1個字符元字符:.
3OR匹配|
4匹配幾個字符之一[a|b]
5匹配除指定字符外的字符[^a|b]
6匹配范圍[a-b]
7匹配特殊字符以\\為前導
8引用元字符以\\為前導
9匹配字符類[:alnum:]、[:xdigit:]、[:alpha:]、[:upper:]等
10匹配多個實例重復元字符總結
11匹配特定位置定位元字符總結
12LIKE與REGEXP二者差別
13匹配區分大小寫REGEXP BINARY

以下為數據庫SQLTEST中的三張表,其結構和內容如下:

1.REGEXP(正則表達式)

# 刪除表記錄 mysql> DELETE-> FROM t_stu_profile-> WHERE Stu_id IN (7,8,9); # 插入表記錄 mysql> INSERT t_stu_profile VALUES-> (7, 'a1000', 'F', 20, '0614'),-> (8, 'a2000', 'M', 21, '0611');

LIKE替換成REGEXP;
LIKE與REGEXP:

mysql> SELECT *-> FROM t_stu_profile-> WHERE Gender REGEXP 'F'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 1 | 郭東 | F | 16 | 0611 | | 3 | 張北 | F | 16 | 0613 | | 5 | 王五 | F | 17 | 0614 | | 6 | 趙七 | F | 16 | 0615 | | 7 | a1000 | F | 20 | 0614 | +--------+----------+--------+------+----------+

2.匹配任意1個字符

.表示匹配任意1個字符

mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP 'a.000'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 7 | a1000 | F | 20 | 0614 | | 8 | a2000 | M | 21 | 0611 | +--------+----------+--------+------+----------+

3.OR匹配

為搜素兩個串之一,使用|;
兩個以上的OR條件:'郭東|王五|張北'。

mysql> DELETE-> FROM t_stu_profile-> WHERE Stu_id IN (7,8,9,10); mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '郭東|王五'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 1 | 郭東 | F | 16 | 0611 | | 5 | 王五 | F | 17 | 0614 | +--------+----------+--------+------+----------+

4.匹配幾個字符之一

[]是另一種形式的OR語句。事實上,正則表達式[123]Ton為[1|2|3]Ton的縮寫。

mysql> SELECT *-> FROM t_stu_profile-> WHERE Class_id REGEXP '061[1|2|3]'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 1 | 郭東 | F | 16 | 0611 | | 2 | 李西 | M | 18 | 0612 | | 3 | 張北 | F | 16 | 0613 | | 4 | 錢南 | M | 17 | 0611 | +--------+----------+--------+------+----------+

5.匹配除指定字符外的字符

字符集合也可以被否定,即,它們將匹配除指定字符外的任何東西。為否定一個字符集,在集合的開始處放置一個^即可。

mysql> SELECT *-> FROM t_stu_profile-> WHERE Class_id REGEXP '061[^4|5]'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 1 | 郭東 | F | 16 | 0611 | | 2 | 李西 | M | 18 | 0612 | | 3 | 張北 | F | 16 | 0613 | | 4 | 錢南 | M | 17 | 0611 | +--------+----------+--------+------+----------+

6.匹配范圍

集合可用來定義要匹配的一個或多個字符。如,[0123456789]等同于[0-9]。

mysql> SELECT *-> FROM t_stu_profile-> WHERE Class_id REGEXP '061[1-3]'-> ORDER BY Age DESC; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 2 | 李西 | M | 18 | 0612 | | 4 | 錢南 | M | 17 | 0611 | | 1 | 郭東 | F | 16 | 0611 | | 3 | 張北 | F | 16 | 0613 | +--------+----------+--------+------+----------+

7.匹配特殊字符

為了匹配特殊字符,必須用\\為前導。\\-表示查找-,\\.表示查找.;
為了匹配反斜杠字符\本身,需要使用\\\。

mysql> INSERT t_stu_profile-> VALUES(7, '.1', 'F', 17, '0612'); mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '\\.'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 7 | .1 | F | 17 | 0612 | +--------+----------+--------+------+----------+

8.引用元字符

元字符:具有特殊含義的字符。

元字符說明
\\f換頁
\\n換行
\\r回車
\\t制表
\\v縱向制表

9.匹配字符類

為更方便工作,可以使用預定義的字符集,稱為字符類

類說明等同
[:alnum:]任意字母和數字[a-zA-Z0-9]
[:xdigit:]任意十六制數字[a-fA-F0-9]
[:alpha:]任意字符[a-zA-Z]
[:upper:]任意大寫字母[A-Z]
[:lower:]任意小寫字母[a-z]
[:digit:]任意數字[0-9]
[:contrl:]ASCII控制字符ASCII 0到31和127
[:punct:]既不在[:alnum:]又不在[:contrl:]中的任意字符
[:blank:]空格和制表[\\t]
[:space:]包括空格在內的任意空白字符[\\f\\n\\r\\t\\v]
[:print:]任意可打印字符
[:graph:]與[:print:]相同,但不包括空格

10.匹配多個實例

目前為止使用的所有正則表達式都試圖匹配單次出現,但有時需要對匹配的數目進行更強的控制。

元字符說明等同
.任意1個字符匹配
*0個或多個匹配
+1個或多個匹配{1,}
0個或1個字符{0,1}
{n}指定數目的匹配
{n,}不少于指定數目的匹配
{n,m}匹配數目的范圍(m不超過255)

\\(是對(的轉義;[0-9]匹配任意數字;tests?匹配test和tests,?匹配它前面的任何字符的0次或1次;\\)是對)的轉義。

# 刪除行:Stu_Name=.1 mysql> DELETE-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '[//.].'; mysql> INSERT t_stu_profile-> VALUES-> (7, '(1 test)', 'F', 15, '0612'),-> (8, '(2 tests)', 'M', 16, '0615'); mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '\\([0-9] tests?\\)'; +--------+-----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+-----------+--------+------+----------+ | 7 | (1 test) | F | 15 | 0612 | | 8 | (2 tests) | M | 16 | 0615 | +--------+-----------+--------+------+----------+ mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '[\\(][1,2] tests?[\\)]'-> ORDER BY Class_id DESC,Age DESC; +--------+-----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+-----------+--------+------+----------+ | 8 | (2 tests) | M | 16 | 0615 | | 7 | (1 test) | F | 15 | 0612 | +--------+-----------+--------+------+----------+

匹配連在一起的5個字符;
[:alpha:]匹配任意字符,{4}要求它前面的字符出現4次,所以[:alpha:]{4}匹配連在一起的任意4位字符,同[a-z][a-z][a-z][a-z]。

mysql> INSERT t_stu_profile-> VALUES-> (7, 'AAAA', 'F', 15, '0611'),-> (8, 'A1A1', 'M', 14, '0615'); mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '[:alpha:]{4}'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 7 | AAAA | F | 15 | 0611 | +--------+----------+--------+------+----------+ mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '[a-z][a-z][a-z][a-z]'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 7 | AAAA | F | 15 | 0611 | +--------+----------+--------+------+----------+

11.匹配特定位置

目前為止的所有例子都是匹配一個串中任意位置的文本。為了匹配特定位置的文本,需要使用定位元字符

定位元字符說明
^文本的開始
$文本的結尾
[[:<:]]詞的開始
[[:>:]]詞的結尾

找一個以小數點或小寫字母開頭的Stu_Name。

mysql> DELETE-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '[:alnum:]{4}'; mysql> INSERT t_stu_profile-> VALUES-> (7, '.test', 'F', 15, '0611');-> (8, 'test', 'M', 15, '0612'); mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '^[\\.[:lower:]]'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 7 | .test | F | 15 | 0611 | | 8 | test | M | 15 | 0612 | +--------+----------+--------+------+----------+

^的雙重用途:①在集合([])中用來否定該集合;②用來指串的開始處。

簡單的正則表達式測試:可以用帶文字串的REGEXP來測試表達式,并試驗它們,相應的語法如下:SELECT 'hello' REGEXP '[0-9]'。

12.LIKE與REGEXP

LIKE與REGEXP的差別:LIKE匹配整個列,如果被匹配的文本在列值中出現,LIKE將不會找到它;而REGEXP在列值內進行匹配,如果被匹配的文本在列值中出現,REGEXP將會找到它。

使REGEXP起類似LIKE的作用:LIKE匹配整個串而REGEXP匹配子串。利用定位符,通過用^開始每個表達式,用$結束每個表達式,可以使REGEXP的作用與LIKE一樣。

mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name LIKE '1000'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 9 | 1000 | F | 14 | 0613 | +--------+----------+--------+------+----------+mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP '1000'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 7 | a1000 | F | 20 | 0614 | | 9 | 1000 | F | 14 | 0613 | +--------+----------+--------+------+----------+

13.匹配區分大小寫

MySQL中的正則表達式匹配不區分大小寫,為區分大小寫,可使用BINARY關鍵字。

mysql> INSERT t_stu_profile-> VALUES (10, 'A1000', 'F', 22, '0612'); mysql> SELECT *-> FROM t_stu_profile-> WHERE Stu_Name REGEXP BINARY 'A1000'; +--------+----------+--------+------+----------+ | Stu_id | Stu_Name | Gender | Age | Class_id | +--------+----------+--------+------+----------+ | 10 | A1000 | F | 22 | 0612 | +--------+----------+--------+------+----------+

總結

以上是生活随笔為你收集整理的6/7 SELECT语句:过滤(正则表达式REGEXP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。