MySQL正規表示式搜尋 md

2021-08-02 22:41:27 字數 4325 閱讀 2529

3 進行or匹配

4 匹配幾個字元之一

5 匹配範圍

6 匹配特殊字元

7 匹配字元類

8 匹配多個例項

9 定位符

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

和熟知的正規表示式相比,sql語言僅僅支援少量,是乙個子集。

以簡單例子開始,

mysql> select prod_name from products where prod_name regexp '1000' order by prod_name;

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

| prod_name |

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

| jetpack 1000 |

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

分析,正規表示式以regexp操作符開始,類似於like操作符。

mysql> select prod_name from products where prod_name regexp '.000' order by prod_name;

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

| prod_name |

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

| jetpack 1000 |

| jetpack 2000 |

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

分析,.是正規表示式語言中特殊字元,表示匹配任一字元。同樣的,匹配不區分大小寫

為搜尋兩個串之一,使用|,注意觀察以下兩個例子的差別。區別在於,正規表示式中,1000後面是否帶有空格。

mysql> select prod_name from products where prod_name regexp '1000|2000' order by prod_name;

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

| prod_name |

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

| jetpack 1000 |

| jetpack 2000 |

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

mysql> select prod_name from products where prod_name regexp '1000 | 2000' order by prod_naame;

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

| prod_name |

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

| jetpack 2000 |

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

匹配特定字元,可以通過來完成。

mysql> select prod_name from products where prod_name regexp '[123] ton' order by prod_namee;

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

| prod_name |

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

| 1 ton anvil |

| 2 ton anvil |

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

分析,這裡使用[123],定義一組字元,它的意思是匹配1或2或3.

同樣的,若匹配不包括123的字元,可以使用^,

mysql> select prod_name from products where prod_name regexp '[^123] ton' order by prod_namme;

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

| prod_name |

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

| .5 ton anvil |

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

當匹配集合需要一定範圍值時,可以使用-來定義,

mysql> select prod_name from products where prod_name regexp '[1-5] ton' order by prod_namee;

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

| prod_name |

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

| .5 ton anvil |

| 1 ton anvil |

| 2 ton anvil |

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

此處,由於* .5 ton anvil*匹配,所有被返回。

匹配特殊字元,需要使用\\作為先導。

mysql> select vend_name from vendors where vend_name regexp '\\.' order by vend_name;

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

| vend_name |

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

| furball inc. |

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

分析,大部分程式語言對特殊符號,使用轉義字元為\,而mysql需要\\

為方便找尋所有的數字、所有字母,可以使用預定義的字符集,成為字元類(character class)。類說明

[:alnum:]

任意的字母和數字

[:alpha:]

任意字元

[:blank:]

空格和製表

[:cntrl:]

ascii控制字元

[:digit:]

任意數字

[:graph:]

與[:print:]相同,但不包括空格

[:lower:]

小寫字母

[:print:]

任意可列印字元

[:punct:]

既不在 [:alnum:]又不在[:cntrl:]

[:space:]

包括空格在內的任意空白字元

[:upper:]

任意大寫字母

[:xdigit:]

任意十六位進製數字

有時需要對匹配的數目進行更強的控制。例如,可能需要尋找所有的數,不管包含多少數字,或者可能想尋找乙個單詞。以下列出正規表示式重複元字元,

元字元說明

*0個或多個匹配

+1個或多個匹配

?0個或1個匹配

指定數目的匹配

不少於指定數目的匹配

匹配數目的範圍

例子,

mysql> select prod_name from products where prod_name regexp '\\([0-9] sticks?\\)' order byy prod_name;

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

| prod_name |

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

| tnt (1 stick) |

| tnt (5 sticks) |

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

分析,正規表示式』\([0-9] sticks?\).\(匹配)[0-9]匹配任一字元,sticks??,,使s`可選。

另一例子,匹配連在一起的四個數字,

mysql> select prod_name from products where prod_name regexp '[[:digit:]]' order by prodd_name;

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

| prod_name |

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

| jetpack 1000 |

| jetpack 2000 |

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

目前為知,所有的例子都匹配乙個串中任意位置的文字,為匹配特定位置,需要增加定位符,

元字元說明

^文字的開始

$文字的結尾

[[:<:]]

詞的開始

[[:>:]]

詞的結尾

- 注意,^的雙重用途,在集合中用來否定該集合,否則,用來指定串的開始。

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

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

mysql 使用正規表示式搜尋

mysql僅僅支援正規表示式的乙個很小的子集 檢索prob name包含文字四位數字且數字末尾是 000 的所有行 select prob name from products where prob name regexp 000 order by prob name 這個例子可以用like來完成,...

正規表示式 MySQL搜尋過濾

在資料庫的資料過濾過程中只用where子句和like操作符都是對於已知值進行的 不管是匹配乙個還是多個值,測試大於還是小於已知值,或者檢查某個範圍的值,都是使用已知的值 當然mysql語句也提供了萬用字元百分號 和下劃線 來匹配多個和單個字元 在檢索名中包含某些文字或字元的字段時確實很有用,但是這種...