MySQL正則表示式
select * from wp_posts where post_name REGEXP 'hello'; 可以檢索出列post_name中所有包含hello的行
2. .匹配除\n之外的任意單個字元
select * from wp_posts where post_name REGEXP '.og';
.是正則表示式中裡一個特殊的字元。它表示匹配一個字元,因此,bog,cog,dog等等都能匹配。
注意:
關於大小寫的區分:MySQL中正則表示式匹配(從版本3.23.4後)不區分大小寫 。
如果要區分大小寫,應該使用BINARY關鍵字,如where post_name REGEXP BINARY 'Hello .000'
3. ^匹配字串開始位置,如查詢所有姓王的人名
select name from 表名 where name REGEXP '^王';
4. $匹配字串結束位置,如查詢所有姓名末尾是“明”的人名
select name from 表名 where name REGEXP '明$';
5. OR匹配
為了搜尋多個串之一,使用|
select * from products where pro_id REGEXP '1000|2000';
這樣就1000和2000都能匹配並返回,當然,使用多個|就可以匹配多個串
6. []匹配幾個字元
例如,這樣將要匹配[0123456789]可以匹配0到9,[1-4][4-9]也是合法的範圍。
此外,範圍不一定只是數值的,[a-z]匹配任意字母字元
如查詢出w/z/s開頭的的人名
SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';
7. [^……],匹配不包含在[]的字元,如查詢出除chenmin之外的人名
SELECT prod_name FROM products WHERE prod_name REGEXP '[^chenmin]';
8. 匹配特殊字元使用\進行轉義
\\.能夠匹配.
\\f換頁
\\n換行
\\r回車
\\t製表
\\縱向製表
9. 匹配字元類
[:alnum:] 任意字母和數字(通[a-zA-Z0-9])
[:alpha:] 任意字元(同[a-zA-Z])
[:blank:] 空格和製表符(同[\\t])
[:digit:] 任意數字(同[0-9])
[:lower:] 任意小寫字母
[:upper:] 任意大寫字母
[:space:] 包括空格在內的任意空白字元
10. 匹配多個例項,關於重複元字元
* 0個或者多個匹配
+ 1個或者多個匹配(等於{1,})
? 1個或者0個匹配(等於{0,1})
{n} 指定數目的匹配
{n,} 不少於指定數目的匹配
{n,m} 匹配數目的範圍(m不超過255)
a*
可以寫成a{0,}
a+
可以寫成a{1,}
a?
可以寫成a{0,1}
例子:select prod_name from products where prod_name REGEXP '[[:DIGIT:]]{4}';
如前所述,[:digit:]匹配任意數字,因而它為數字的一個幾何。
[[:digit:]]{4}匹配連在一起的任意4位數字,當然,上面的例子也可以這樣寫REGEXP '[0-9][0-9][0-9][0-9]'
SELECT name FROM tab1 WHERE name REGEXP 'a*'; 匹配0個和多個a
11. 定位符
^ 文字的開始
& 文字的結尾
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
通過使用這些定位符,能夠使REGEXP起類似LIKE的作用
查詢找到所有的名字以'st'開頭
?1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st' ; |
查詢找到所有的名字以'ok'結尾
?1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$' ; |
查詢找到所有的名字包函'mar'的字串
?1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar' ; |
查詢找到所有名稱以母音開始和'ok'結束 的
?1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$' ; |
一個正則表示式中的可以使用以下保留字
^
所匹配的字串以後面的字串開頭
?12 | mysql> select "fonfo" REGEXP "^fo$" ; -> 0(表示不匹配) mysql> select "fofo" REGEXP "^fo" ; -> 1(表示匹配) |
$
所匹配的字串以前面的字串結尾
?123 | mysql> select "fono" REGEXP "^fono$" ; -> 1(表示匹配) mysql> select "fono" REGEXP "^fo$" ; -> 0(表示不匹配) . |
匹配任何字元(包括新行)
?12 | mysql> select "fofo" REGEXP "^f.*" ; -> 1(表示匹配) mysql> select "fonfo" REGEXP "^f.*" ; -> 1(表示匹配) |
a*
匹配任意多個a(包括空串)
?123 | mysql> select "Ban" REGEXP "^Ba*n" ; -> 1(表示匹配) mysql> select "Baaan" REGEXP "^Ba*n" ; -> 1(表示匹配) mysql> select "Bn" REGEXP "^Ba*n" ; -> 1(表示匹配) |
a+
匹配任意多個a(不包括空串)
?12 |
|