十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1. 基本字符匹配:
創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十余年品質(zhì),值得信賴!
select name from user where name REGEXP '1000';
檢索name中包含文本1000的所有行。
select name from user where name REGEXP '.000';
.在正則表達式中表示匹配任意一個字符。
2. 進行OR匹配:
select name from user where name REGEXP '1000|2000';
檢索name中包含文本1000或2000的所有行。
3. 匹配幾個字符之一:
select name from user where name REGEXP '[123] Ton';
[123]定義一組字符,它的意思是匹配1或2或3。
select name from user where name REGEXP '[1-3] Ton';
-用來定義一個范圍。
4. 匹配特殊字符:
匹配特殊字符,必須用\為前導(dǎo),\-表示查找-,\.表示查找.
5. 匹配多個實例:
*: 0個或多個匹配;
+:1個或多個匹配(等于{1,});
?:0個或1個匹配(等于{0,1});
{n}:指定數(shù)目的匹配;
{n,}:不少于指定數(shù)目的匹配;
{n,m}:匹配數(shù)目的范圍(m不超過255)。
6. 定位符:
^:文本的開始;
$:文本的結(jié)尾;
[[::]]:詞的開始;
[[::]]:詞的結(jié)尾;
^在集合中:用來否定該集合,例如[^0-9],表示不匹配數(shù)字
{n,m}
表示,前面的字符至少匹配n次,最多匹配m次
用php preg_match()函數(shù)舉例
?php
$str = 'goooogle';
if(preg_match("/go{1,3}gle/",$str)) echo '匹配';
else echo '不匹配';
//g*gle 其中的*號只能在1-3個o時能匹配
?
親 你沒用頻率限制詞設(shè)定后面的字節(jié),如果你的產(chǎn)品編號字段下,有“半” 、“長” 這樣的單個記錄,就能匹配到了。因為你限制了顯示記錄為兩條,所以有not語句其實是把所以記錄都匹配上了,并不是正好相反的結(jié)果哦
應(yīng)該這樣寫 select * from db.tb where 產(chǎn)品編號 RegExp '^[\u4e00-\u9fa5].*' limit2
正則表達式的作用是匹配文本,將一個模式與一個文本串進行比較,MySQL用WHERE子句對正則表達式提供初步的支持,允許指定正則表達式,過濾SELECT檢索出來的數(shù)據(jù),但是其實MySQL支持的只是正則表達式的一小部分;
通過實驗的結(jié)果我發(fā)現(xiàn)LIKE是嚴(yán)格遵守整個列值進行匹配,而REGEXP只需要列值的部分包含表達式即可;通俗點講就是,LIKE后面跟的字符位數(shù)和列值完全一致,但是REGEXP后跟的字符位數(shù)只需要小于或等于即可匹配;
默認(rèn)情況下LIKE和REGEXP匹配是不區(qū)分大小寫的,如果要區(qū)分大小寫需要使用關(guān)鍵字BINARY;
[1-9]和[123456789]等價,字母也可以[a-z],也可以是非完整的比如[1-3][6-9];
正則表達式中出現(xiàn)過的特殊字符比如.[]|-等等,出現(xiàn)在所取值中,應(yīng)該使用\進行轉(zhuǎn)義顯示;
有一些已經(jīng)定義好的mysql內(nèi)部,可以直接使用的類;
表9-2 字符類
類 說 明
[:alnum:] 任意字母和數(shù)字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意數(shù)字(同[0-9])
[:graph:] 與[:print:]相同,但不包括空格
[:lower:] 任意小寫字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在內(nèi)的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大寫字母(同[A-Z])
[:xdigit:] 任意十六進制數(shù)字(同[a-fA-F0-9])
表9-3 重復(fù)元字符
控制匹配的字符出現(xiàn)次數(shù)
元 字 符 說 明
* 0個或多個匹配
+ 1個或多個匹配(等于{1,})
? 0個或1個匹配(等于{0,1})
{n} 指定數(shù)目的匹配
{n,} 不少于指定數(shù)目的匹配
{n,m} 匹配數(shù)目的范圍(m不超過255)
前面使用的REGEXP都是匹配列的任意位置,如果只想匹配特殊位置,需要使用定位符;
定位元字符
元 字 符 說 明
^ 文本的開始
$ 文本的結(jié)尾
[[::]] 詞的開始
[[::]] 詞的結(jié)尾
前提是不選擇庫和表的時候,否則會報錯;
如果結(jié)果為真則返回1,否則返回0;
屬性名 regexp ‘匹配方式'
正則表達式的模式字符
^ 匹配字符開始的部分
eg1: 從info表name字段中查詢以L開頭的記錄
select * from info where name regexp '^L';
eg2: 從info表name字段中查詢以aaa開頭的記錄
select * from info where name regexp '^aaa';
$ 匹配字符結(jié)束的部分
eg1: 從info表name字段中查詢以c結(jié)尾的記錄
select * from info where name regexp 'c$';
eg2: 從info表name字段中查詢以aaa結(jié)尾的記錄
select * from info where name regexp 'aaa$';
. 匹配字符串中的任意一個字符,包括回車和換行
eg1: 從info表name字段中查詢以L開頭y結(jié)尾中間有兩個任意字符的記錄
select * from info where name regexp '^L..y$';
[字符集合]匹配字符集合中的任意字符
eg1: 從info表name字段中查詢包含c、e、o三個字母中任意一個的記錄
select * from info where name regexp '[ceo]';
eg2: 從info表name字段中查詢包含數(shù)字的記錄
select * from info where name regexp '[0-9]';
eg3: 從info表name字段中查詢包含數(shù)字或a、b、c三個字母中任意一個的記錄
select * from info where name regexp '[0-9a-c]';
[^字符集合]匹配除了字符集合外的任意字符
eg1: 從info表name字段中查詢包含a-w字母和數(shù)字以外字符的記錄
select * from info where name regexp '[^a-w0-9]';
s1|s2|s3 匹配s1s2s3中的任意一個
eg1: 從info表name字段中查詢包含'ic'的記錄
select * from info where name regexp 'ic';
eg2: 從info表name字段中查詢包含ic、uc、ab三個字符串中任意一個的記錄
select * from info where name regexp 'ic|uc|ab';
* 代表多個該字符前的字符,包括0個或1個
eg1: 從info表name字段中查詢c之前出現(xiàn)過a的記錄
select * from info where name regexp 'a*c';
+ 代表多個該字符前的字符,包括1個
eg1: 從info表name字段中查詢c之前出現(xiàn)過a的記錄
select * from info where name regexp 'a+c';(注意比較結(jié)果!)
字符串{N} 字符串出現(xiàn)N次
eg1: 從info表name字段中查詢出現(xiàn)過a3次的記錄
select * from info where name regexp 'a{3}';
字符串{M,N}字符串最少出現(xiàn)M次,最多出現(xiàn)N次
eg1: 從info表name字段中查詢ab出現(xiàn)最少1次最多3次的記錄
select * from info where name regexp 'ab{1,3}';
MYSQL中自帶通配符(LIKE關(guān)鍵詞)
%可以表示任意長度的字符(包括0)
-可以表示單個字符