Mysql正則表示式整理
正則表示式:
1、背景:
正則表示式是用來匹配文字的特殊的串(字元集合)。如果你想從一個文字檔案中提取電話號碼,可以使用正則表示式;如果你需要查詢名字中間有數字的所有檔案,可以使用一個正則表示式;如果你想在一個文字塊中找到所有重複的單詞,可以使用一個正則表示式。
2、作用:
匹配文字,將一個模式(正則表示式)與一個文字串進行比較。mysql用where子句對正則表示式提供了初步的支援,允許你指定正則表示式過濾select檢索出的資料。
3、例子:
3.1
select prod_name
from products
where prod_name regexp'1000|2000'
order by prod_name;
select * from XXX where dt='20201118' and scztmc REGEXP '浙江大華機器人技術有限公司|杭州泛普生物科技有限公司';
為了匹配特殊字元,必須使用\\為前導。
\\- 表示查詢-, \\. 表示查詢. 。
select vend_name
from vendors
where vend_name regexp '\\.'
order by vend_name;
3.3
select prod_name
from products
where prod_name regexp '[[:digit:]]{4}'
order by prod_name;
如前所述,[:digit:]匹配任意數字,因而為數字的一個集合。
{4}確切地要求它前面的字元(任意數字)出現4次,所以[[:digit:]]{4}匹配連在一起的任意4位數字。
3.4
定位符:
上面的所有例子都是匹配一個串中任意位置的文字。為了匹配特殊位置的文字,可使用如下定位符。
^ 文字的開始
$ 文字的結尾
select prod_name
from products
where prod_name regexp '^[0-9\\.]'
order by prod_name;
這個是找出一個數(包括以小數點開始的數)開始的所有產品。
3、簡單的正則表示式測試:
可以在不使用資料庫表的情況下用select來測試正則表示式。
regexp檢查總是返回0(沒有匹配)或1(匹配)
例如:select 'hello' regexp '[0-9]';
這個例子顯然將返回0(因為文字hello中沒有數字)。