使用MySQL正規表示式 MySQL必知必會

2021-06-09 21:20:04 字數 4690 閱讀 2644

正規表示式作用是匹配方本,將乙個模式(正規表示式)與乙個文字串進行比較。

mysql用where子句對正規表示式提供了初步的支援,允許你指定用正規表示式過濾select檢索出的資料。

mysql僅支援多數正規表示式實現的乙個很小的子集。

----------------------

9.2.1  基本字元匹配

regexp後所跟的東西作為正規表示式處理。

**select prod_name

from products

where prod_name regexp '1000'

order by prod_name;

------返回------

+------------------------+

|    prod_name    |

+------------------------+

|  jetpack 1000  |

+------------------------+

.  表示匹配任意乙個字元。

**select prod_name

from products

where prod_name regexp '.000'

order by prod_name;

------------返回-----------

+-------------------------+

|     prod_name    |

+-------------------------+

|   jetpack 1000  |

|   jetpack 2000  |

+-------------------------+

mysql中的正規表示式匹配不區分大小寫。

為區分大小寫,可使用binary關鍵字。

如:where prod_name regexp binary 'jetpack .000'

9.2.2  進行or匹配

為搜尋兩個串之一(或者這個串,或者為另乙個串),使用 | 。

| 作為or操作符,表示匹配其中之一。可給出兩個以上的or條件。

**select prod_name

from products

where prod_name regexp '1000 | 2000'

order by prod_name;

------------返回------------

+----------------------+

|  prod_name   |

+----------------------+

| jetpack 1000 |

| jetpack 2000 |

+----------------------+

[ ] 匹配任何單一字元。

[123]定義一組字元,意思是匹配1或2或3.

[ ]是另外一種形式的or語句,[123] ton  就是  [1 | 2 | 3] ton 的縮寫。

^ 否定乙個字元集合,將匹配除指定字元外的任何東西。[^123]將匹配除這些字元外的任何東西。

**select prod_name

from products

where prod_name regexp '[123] ton'

order by prod_name;

-------------返回------------

+--------------------+

| prod_name   |

+--------------------+

| 1 ton anvil    |

| 2 ton anvil    |

+--------------------+

匹配範圍

[0123456789] 或 [0-9] 將匹配數字0到9

[a-z] 匹配任意字母符號

**select prod_name

from products

where prod_name regexp '[1-5] ton'

order by prod_name;

----------返回-----------

+-------------------+

|  prod_name |

+-------------------+

|  .5 ton anvil  |

|  1 ton anvil   |

|  2 ton anvil   |

+-------------------+

匹配特殊字元

\\  為前導。即轉義.正規表示式內具有特殊意義的所有字元都必須以這種方式轉義。

\\-  表示查詢 -

\\.  表示查詢 .

**select prod_name

from vendors

where vend_name regexp '\\.'

order by vend_name;

-------------返回-------------

+----------------------+

|  vend_name   |

+----------------------+

|  furball inc.    |

+----------------------+

\\  也用來引用元字元(具有特殊意義的字元)

\\f    換頁

\\n    換行

\\r    回車

\\t    製表

\\v    縱向製表

匹配字元類

**[:a;num:]    任意字母和數字(同 [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\\t\\r\\v])

[:upper:]     任意大小字母(同 [a-z])

[:xdigit:]      任意十六進製制數字(同 [a-fa-f0-9])

匹配多個例項

**元字元              說明

*                       0個或多個匹配

+                      1個或多個匹配(等於 )

?                      0個或1個匹配(等於 )

指定數目的匹配

不少於指定數目的匹配

匹配數目的範圍(m不超過255)

以下例子:s後的?使s可選,因為?匹配它前面的任何字元的0次或1次出現。

**select prod_name

from products

where prod_name regexp '\\([0-9] sticks?\\)'

order by prod_name;

------------返回------------

+-----------------------+

|  prod_name    |

+-----------------------+

|  tnt (1 stick)   |

|  tnt (5 sticks) |

+-----------------------+

匹配連在一直的4位數字:where prod_name regexp '[[:digit:]]'

定位符^         文字的開始

$        文字的末尾

[[:<:]]  詞的開始

[[:>:]]  詞的結尾

**select prod_name

from products

where prod_name regexp '^[0-9\\.]'

order by prod_name;

-----------返回----------

+---------------------+

|   prod_name  |

+---------------------+

|  .5 ton anvil   |

|  1 ton anvil    |

|  2 ton anvil    |

+---------------------+

^的雙重用途:在集合中(用[ ]定義),用它來否定該集合。否則,用來指串的開始和。

like 匹配整個串,而regexp匹配子串。

簡單的正規表示式測試  可以在不使用資料庫的情況下用select來測試正規表示式。

regexp檢查總是返回0(沒有匹配)或1(匹配),可以用帶文字串的regexp來測

試表示式,並試驗它們。相應的語法如下:

select 'hello' regexp '[0-9]'

這個例子返回0(因為文字hello中沒有數字)。

mysql正規表示式 MySQL正規表示式

正規表示式是為複雜搜尋指定模式的強大方式。正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello word匹配字串hello或字串w...

MySql 使用正規表示式

mysql 用where 子句對正規表示式提供了支援,允許你指定正規表示式,注意mysql僅支援多數正規表示式實現的乙個很小的子集。select prod name from products where prod name regexp 1000 mysql 中正規表示式匹配不區分大小寫,為區分大...

mysql 正規表示式

已知mysql可以通過 like 來進行模糊匹配。mysql 同樣也支援其他正規表示式的匹配,mysql中使用 regexp 操作符來進行正規表示式匹配。例項 查詢name欄位中以 st 為開頭的所有資料 mysql select name from person tbl where name re...