用正则表达式进行搜索
正则表达式的介绍
正则表达式的使用环境
- 如果你想从一个文本文件中提取电话号码
- 如果你需要查找名字中间有数字的所有文件
- 如果你想在一个文本块中找到所有重复的单词
- 如果你想替换一个页面中的所有URL为这些URL的实际HTML链接
基本字符匹配
语法结构
SELECT 列名
FROM 表格
WHERE 列名 REGEXP 'XX'
ORDER BY 列名
表示返回列中列名中包含(XX)子列的所有行
除了关键字LIKE被REGEXP代替外,这个语法结构和LIKE的语句相同
LIKE与REGEXP的区别
如果LIKE语句想和REGEXP语句有相同的作用,需要结合(_或%)来使用
进行OR匹配
语法结构
SELECT 列名
FROM 表格
WHERE 列名 REGEXP 条件一 | 条件二
ORDER BY 列名;
这个语句用于检索列表中满足条件一或条件二的所有行
匹配几个字符之一
匹配任何单一字符。但是如果匹配特定的字符,怎么办,可以通过指定一组用[和]括起来的字符来完成。
语法结构
SELECT 列名
FROM 表格
WHERE 列名 REGEXP '[abc] XX'
ORDER BY 列名;
该语句意义为:删选除列值满足a XX 或 b XX 或 c XX的所有的列
正则表达式[abc]xx是[a|b|c]xx的缩写
匹配范围
要是匹配范围,将匹配字符的[abc]换成[a-c]即可
匹配特殊字符
要匹配列值中包含特殊字符,必须使用\ \为作为前导
空白元字符
元字符 | 说明 |
---|---|
\ \f | 换页 |
\ \n | 换行 |
\ \r | 回车 |
\ \t | 制表 |
\ \v | 纵向制表 |
匹配字符类
字符类
类 | 说明 |
---|---|
[ :alnum: ] | 任意字母和数字(同[a-ZA-z0-9]) |
[ :alpha: ] | 任意字符(同[a-zA-Z]) |
[ :black: ] | 空格和制表(同[ \ \t]) |
[ :cntrl: ] | ASCLL控制字符(ASCLL 0到31和127) |
[ :digit: ] | 任意数字(同[0-9]) |
[ :graph: ] | 与[ :print: ]相同,但不包括空格 |
[ :lower: ] | 任意小写字母(同[a-z]) |
[ :print: ] | 任意可打印字符 |
[ :punct: ] | 即不在[ :alnum: ]又不在[ :cntrl: ]中的任意字符 |
类 | 说明 |
---|---|
[ :space: ] | 包括空格在内地任意空白字符 |
[ :upper: ] | 任意大写字符 |
[ :xdigit: ] | 任意十六进制数字 |
匹配多个实例
重复元字符
元字符 | 说明 |
---|---|
* | 0个或多个匹配 |
+ | 1个或多个匹配 |
? | 0个或1个匹配 |
{n} | 指定数目的匹配 |
{n,} | 不少于指定数目的匹配 |
{n,m} | 匹配数目的范围 |
定位符
定位元字符
元字符 | 说明 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
[[: < :]] | 词的开始 |
[[: > :]] | 词的结尾 |