正規表示式在Mysql中的應用

2021-10-19 17:23:45 字數 3295 閱讀 5955

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 又可以 使用一對中括號的方式。用字面量的方式有乙...