mysql+3.11.1_【MySql】1.3 使用正则表达式搜索
一、正則表達式介紹
正則表達式用來匹配文本的特殊的串(字符集合)。
二、使用MySQL正則表達式
1、MySQL僅僅支持多數(shù)正則表達式實現(xiàn)的一個很小的子集
2、LIKE匹配整個列值;而REGEXP匹配列值的子串
如果被匹配的文本在列值中出現(xiàn),REGEXP將會找到它,相應(yīng)的行將被返回。
mysql>select * from students;
+--------+-----------+
|number | name1|
+--------+-----------+
|1 | space|
|2 | warmspace |
+--------+-----------+
mysql>select name1 from students where name1 like 'space'; ? 全名匹配
+-------+
|name1 |
+-------+
|space |
+-------+
mysql>select name1 from students where name1 REGEXP 'space'; ?子串匹配
+-----------+
|name1|
+-----------+
|space|
|warmspace |
+-----------+
3、默認MySQL中的正則表達式匹配不區(qū)分大小寫,可使用BINARY關(guān)鍵字區(qū)分大小寫
mysql> select name1 from students where name1 REGEXP 'SPACE';
+-----------+
| name1 ? ? |
+-----------+
| space ? ? |
| warmspace |
+-----------+
mysql> select name1 from students where name1 REGEXP BINARY 'SPACE';
Empty set (0.00 sec)
4、進行OR匹配:為搜索兩個串之一,使用|
mysql> select * from students;
+--------+-----------+------+
| number | name1 ? ? ?| age ?|
+--------+-----------+------+
| ? ? ?1 | space ? ? ?| ? 15 |
| ? ? ?2 | warmspace ?| ? 34 |
| ? ? ?3 | summerspace | ?28 |
+--------+-----------+------+
2 rows in set (0.00 sec)
mysql> select * from students where age REGEXP '1|4';
+--------+-----------+------+
| number | name1 ? ? | age ?|
+--------+-----------+------+
| ? ? ?1 | space ? ? | ? 15 |
| ? ? ?2 | warmspace | ? 34 |
+--------+-----------+------+
5、匹配幾個字符之一:匹配任何單一字符
[]是另一種形式的OR語句。'005-[123]'與’005-[1|2|3]’是等價的。
mysql> select * from students;
+--------+-------------+------+-----------------+
| number | name1 ? ? ? | age ?| id ? ? ? ? ? ? ?|
+--------+-------------+------+-----------------+
| ? ? ?1 | space ? ? ? | ? 15 | 101-02-01-005-2 |
| ? ? ?2 | warmspace ? | ? 34 | 101-02-01-005-1 |
| ? ? ?3 | summerspace | ? 28 | 101-02-01-005-3 |
| ? ? ?4 | abc ? ? ? ? | ? 20 | 101-02-01-005-4 |
+--------+-------------+------+-----------------+
mysql> select name1,id from students where id REGEXP '005-[123]';
+-------------+-----------------+
| name1 ? ? ? | id ? ? ? ? ? ? ?|
+-------------+-----------------+
| space ? ? ? | 101-02-01-005-2 |
| warmspace ? | 101-02-01-005-1 |
| summerspace | 101-02-01-005-3 |
+-------------+-----------------+
匹配除給定字符外的字符:
mysql> select name1,id from students where id REGEXP '005-[^123]';
+-------+-----------------+
| name1 | id ? ? ? ? ? ? ?|
+-------+-----------------+
| abc ? | 101-02-01-005-4 |
+-------+-----------------+
6、可使用-來定義一個范圍
如[1-9],[a-b]。
mysql> select name1,id from students where id REGEXP '005-[1-3]';
+-------------+-----------------+
| name1 ? ? ? | id ? ? ? ? ? ? ?|
+-------------+-----------------+
| space ? ? ? | 101-02-01-005-2 |
| warmspace ? | 101-02-01-005-1 |
| summerspace | 101-02-01-005-3 |
+-------------+-----------------+
7、為了匹配特殊字符,必須用\\為前導(dǎo)
例如\\-,\\.等。這種處理即轉(zhuǎn)義(escaping)。多數(shù)正則表達式實現(xiàn)使用單個反斜杠轉(zhuǎn)義特殊字符,但MYSQL要求兩個(MYSQL自己解釋一個,正則表達式庫解釋另一個)。\\也用來引用元字符(具有特殊含義的字符),如下表:元字符說明
\\f換頁
\\v縱向制表
8、為了更方便工作,可以使用預(yù)定義的字符集,稱為字符類(character class)
mysql> select name1,age from students where age REGEXP '[[:digit:]]';
+-------------+------+
| name1 ? ? ? | age ?|
+-------------+------+
| space ? ? ? | ? 15 |
| warmspace ? | ? 34 |
| summerspace | ? 28 |
| abc ? ? ? ? | ? 20 |
+-------------+------+類說明
[: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、使用正則表達式重復(fù)元字符匹配多個實例
mysql> select * from students;
+--------+-------------+------+-----------------+
| number | name1 ? ? ? | age ?| id ? ? ? ? ? ? ?|
+--------+-------------+------+-----------------+
| ? ? ?1 | space ? ? ? | ? 15 | 101-02-01-005-2 |
| ? ? ?2 | warmspace ? | ? 34 | 101-02-01-005-1 |
| ? ? ?3 | summerspace | ? 28 | 101-02-01-005-3 |
| ? ? ?4 | abc ? ? ? ? | ? 20 | 101-02-01-005-4 |
+--------+-------------+------+-----------------+
mysql> select * from students where name1 REGEXP 'm{2}';
+--------+-------------+------+-----------------+
| number | name1 ? ? ? | age ?| id ? ? ? ? ? ? ?|
+--------+-------------+------+-----------------+
| ? ? ?3 | summerspace | ? 28 | 101-02-01-005-3 |
+--------+-------------+------+-----------------+元字符說明
*0個或多個匹配
+1個或多個匹配(等于{1,})
?0個或1個匹配(等于{0,1})
{n}指定數(shù)目的匹配
{n,}不少于指定數(shù)目的匹配
{n,m}匹配數(shù)目的范圍(m不超過255)
10、定位符(為了匹配特定位置的文本)
mysql> select * from students where name1 REGEXP 'c$';
+--------+-------+------+-----------------+
| number | name1 | age ?| id ? ? ? ? ? ? ?|
+--------+-------+------+-----------------+
| ? ? ?4 | abc ? | ? 20 | 101-02-01-005-4 |
+--------+-------+------+-----------------+元字符說明
^文本的開始
$文本的結(jié)尾
[[:<:>
[[:>:]]詞的結(jié)尾
11、簡單的正則表達式測試:可以在不使用數(shù)據(jù)庫表的情況下用SELECT來測試正則表達式
REGEXP檢查總是返回0或1(匹配)。
mysql> select 'hello' regexp '[0-9]';
+------------------------+
| 'hello' regexp '[0-9]' |
+------------------------+
| ? ? ? ? ? ? ? ? ? ? ?0 |
+------------------------+
總結(jié)
以上是生活随笔為你收集整理的mysql+3.11.1_【MySql】1.3 使用正则表达式搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信网名空格怎么打
- 下一篇: 常用MySQL函数存储过程_解析MySQ