Mysql 的正則表達式
匹配文本,將一個模式與文本進行比較
例如:
select name_s
from pros
where name_s regexp '1000' //表示包含1000的所有行 s1000也是
order by name_s;
.
是正則表達式語言中的任意匹配一個字符的意思select * from emp where name_s regexp 'A.' //不區分大小寫 order by name_s; where name_s regexp binary 'a.' //區分大小寫
1. 進行or匹配
爲了搜索兩個串之一(兩種串我都要)
|
select * from emp where name_s REGEXP 'a|c' ORDER by name_s; ///有a或有c
2. 匹配幾個字符之一
匹配單一字符。但是,如果想要特定字符就需要
[]
select prod_name from products
WHERE prod_name REGEXP '[123] Ton' # 從123中的任意一個 類似[1|2|3]
select prod_name from products
WHERE prod_name REGEXP '[^123] Ton' # 除了123以外
select prod_name from products
WHERE prod_name REGEXP '1|2|3 Ton' #注意這裏是 1 | 2 | 3 Ton
3. 匹配範圍
-
號替換
[1-3] = [123] 這兩個相同
[a-z] = [a...z]
4. 使用特殊字符
如
.
我們要使用的話
\\
前導這個就可以了
select * from products
WHERE prod_name REGEXP '\\.'
select * from products
WHERE prod_name REGEXP '[\\t]' --空格
類 | 說明 |
---|---|
[:alnum:] | 任意字母和數字(同[a-zA-Z0-9]) |
[:alpha:] | 任意字符(同[a-zA-Z]) |
[:blank:] | 空格和製表(同[\t]) |
[:cntrl:] | ASCII控制字符(ASCII 0到31和127) |
[:digit:] | 任意數字(同[0-9]) |
[:graph:] | 與[:print:]相同,但不包括空格 |
[:lower:] | 任意小寫字母(同[a-z]) |
[:print:] | 任意可打印字符 |
[:punct:] | 既不在[:alnum:]又不在[:cntrl:]中的任意字符 |
[:space:] | 包括空格在內的任意空白字符(同[\f\n\r\t\v]) |
[:upper:] | 任意大寫字母(同[A-Z]) |
[:xdigit:] | 任意十六進制數字(同[a-fA-F0-9] |
元 字 符 | 說 明 |
---|---|
+ | 1個或多個匹配(等於{1,}) |
* | 0個或多個匹配 |
{n} | 指定數目的匹配 |
{n,} | 不少於指定數目的匹配 |
{n,m} | 匹配數目的範圍(m不超過255) |
樣例:
SELECT * from products
WHERE prod_name Regexp '[[:digit:]]{4}'
order by prod_name
Query result 2 rows!
prod_id | vend_id | prod_name | prod_price | prod_desc |
---|---|---|---|---|
JP1000 | 1005 | JetPack 1000 | 35 | JetPack 1000, intended for single use |
JP2000 | 1005 | JetPack 2000 | 55 | JetPack 2000, multi-use |
模式 | 描述 |
---|---|
^ | 匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之後的位置。 |
$ | 匹配輸入字符串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 |
. | 匹配除 “\n” 之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,請使用象 ‘[.\n]’ 的模式。 |
[…] | 字符集合。匹配所包含的任意一個字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[^…] | 負值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。 |
* | 匹配前面的子表達式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價於{0,}。 |
+ | 匹配前面的子表達式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價於 {1,}。 |
{n} | n 是一個非負整數。匹配確定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o。 |
{n,m} | m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
SELECT *
from products
WHERE prod_name
Regexp '\\([0-9] stic.{0,1}\\)'
order by prod_name