Mysql 的正則表達式簡介

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章