mysql僅支援多數正規表示式實現的一小部分的子集
mysql>
select ename,deptno from emp where deptno regexp
'20'
;
+-------+--------+
| ename | deptno |
+-------+--------+
| smith | 20 |
| jones | 20 |
| scott | 20 |
| adams | 20 |
| ford | 20 |
+-------+--------+
5 rows in
set(0.00 sec)
有的書上like匹配的是整個列,如果被匹配的文字在列值**現,like將不會找到他,相應的行也不會被返回(除非使用萬用字元)
這裡我在mysql 8.0.23-0ubuntu0.20.04.1
中測試中是是能夠返回的。
mysql> select ename from emp where ename like 'smith';
+-------+
| ename |
+-------+
| smith |
+-------+
1 row in set (0.00 sec)
mysql>
select ename,deptno from emp where deptno regexp
'20|30';+
--------+--------+
| ename | deptno |
+--------+--------+
| smith |20|
| allen |30|
| ward |30|
| jones |20|
| martin |30|
| blake |30|
| scott |20|
| turner |30|
| adams |20|
| james |30|
| ford |20|
+--------+--------+
11rows
inset
(0.00 sec)
使用
表示一組集合或者範圍,可以匹配集合中的任意乙個元素
mysql>
select ename,hiredate from emp where hiredate regexp
'198[0-9]-\\d-\\d';+
--------+------------+
| ename | hiredate |
+--------+------------+
| smith |
1980-12
-17|| allen |
1981-02
-20|| ward |
1981-02
-22|| jones |
1981-04
-02|| martin |
1981-09
-28|| blake |
1981-05
-01|| clark |
1981-06
-09|| scott |
1987-04
-19|| king |
1981-11
-17|| turner |
1981-09
-08|| adams |
1987-05
-23|| james |
1981-12
-03|| ford |
1981-12
-03|| miller |
1982-01
-23|+
--------+------------+
14rows
inset
(0.00 sec)
匹配特殊字元同樣需要轉義,mysql中的轉義是\\
所以正規表示式中的特殊元字元在mysql中的轉義多了乙個\
字元類說明
[:alnum:]
任何乙個字母或者數字
[:alpha:]
任何乙個字母
[:blank:]
空格或者製表符
[:cntrl:]
ascii控制符
[:digit:]
任何乙個數字
[:graph:]
和[:print:]一樣,但不包含空格
[:lower:]
任何乙個小寫字母
[:upper:]
任何乙個大寫字母
[:print:]
任何乙個可列印字元
[:punct:]
既不屬於[:alnum:]也不屬於[:cntrl:]的任何乙個字元
[:space:]
任何乙個空白字元,包括空格
[:xdigit:]
任何乙個十六進製制數字
元字元說明
?匹配0個或者1個
+匹配1個或者多個
*匹配0個或者多個
必須匹配n個
必須至少匹配n個
必須是少匹配m個至多匹配n個
這點在mysql中的實現於正規表示式中的定義有點不同
元字元說明
\b表示乙個單詞的開始和結束
\b表示乙個非單詞的開始和結束
匹配cat
單詞
"\bcat\b"
元字元說明^
文字的開始
$文字的結尾
[[:<:]]
單詞的開始
[[:>:]]
單詞的結尾
操作符說明
(?=)
查詢指定內容之前的內容作為匹配結果
(?!)
查詢不是以指定內容結尾的內容作為匹配結果
(?<=)
查詢指定以內容開始的內容作為匹配結果
(?擦護照不是以指定內容開始的內容作為匹配結果
"(?<=[tt][ii][tt][ll][ee]).*?(?=/[tt][ii][tt][ll][ee])"
結果:
匹配html的title標籤
mysql正規表示式 MySQL正規表示式
正規表示式是為複雜搜尋指定模式的強大方式。正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello word匹配字串hello或字串w...
正規表示式在VB中的應用
引用了microsoft vbscript regular expressions 5.5 後就可以宣告正則相關物件了。主要有三個物件 regexp matchcollection match。1.regexp 這是vb使用正規表示式匹配模式的主要物件了。其提供的屬性用於設定那些用來比較的傳遞給 r...
正規表示式在JS中的應用
正規表示式作用 用來過濾指定規則的字元的一種方法,比較便捷。在js中定義正規表示式中,正規表示式都是在 g中定義的,表示的是g表示的是全域性的。而雙斜槓 就是使用字面量表示式的方式。兩者並沒有本質不同。就像宣告乙個陣列,我們既可以用new array 又可以 使用一對中括號的方式。用字面量的方式有乙...