正则表达式
通常用于判断语句中,用来检查某一字符串是否满足某一格式
正则表达式组成
- 普通字符
- 元字符
普通字符:包括大小写字母、数字、标点符号及一些其他符号
元字符:是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式
通配符与正则表达式区别
- 通配符通常用于查看文件目录,常用的通配符有*、!、?、[ ... ]
- 正则表达式通常用于匹配文件内容,正则匹配精准度比通配符更高
基础正则表基式常见元字符
支持的工具:grep、egrep、sed、awk
| 元字符 | 作用 | 示例 |
|---|---|---|
| \ | 转义字符,用于取消特殊符号的含义 | \!、\n、\$等 |
| ^ | 匹配字符串开始的位置 | ^a、^the、^#、^[a-z] |
| $ | 匹配字符串结束的位置 | words、^$匹配空行 |
| . 点 | 匹配除\n之外的任意的一个字符 | go.d、g..d |
| * | 匹配前面的子表达式0次或者多次 | goo*d、 go.*d |
| [list] | 匹配list列表中的一个字符 | go[ola]d、[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字 |
| [^list] | 匹配任意非list列表中的一个字符 | [^0-9]、[^A-20-9]、[^a-z]匹配任意一位非小写字母 |
| {n} | 匹配前面的子表达式n次 | go{2}d、'[0-9]{2}'匹配两位数字 |
| {n,} | 匹配前面的子表达式不少于n次 | go{2,}d、'[0-9]{2,}匹配两位及两位以上数字 |
| {n,m} | 匹配前面的子表达式n到m次 | go{2,3}d、'[0-9]{2,3}'匹配两位到三位数字 |
| 注:egrep、awk使用{n}、 {n,} 、 {n,m}匹配时“ { }"前不用加"\" | ||
| \w | 匹配包括下划线的任何单词字符 | |
| \W | 匹配任何非单词字符 | 等价于"[^A-Za-z0-9_]" |
| \d | 匹配一个数字字符 | |
| \D | 匹配一个非数字字符 | 等价于[^0-9] |
| \s | 空白符 | |
| \S | 非空白符 | |
-
^开始的位置
-
$结束的位置,\转义字符
- 补充:“!$”表示上次执行的命令最后一个字段
- 补充:“!$”表示上次执行的命令最后一个字段
-
. 匹配除换行之外的任意一个字符
-
* 匹配前面的子表达式0次或者多次
和 . 点结合使用
-
匹配列表中的一个字符
-
匹配任意非列表中的一个字符
-
匹配前面的子表达式
扩展正则表达式元字符
支持的工具:egrep、awk、grep -E、sed -r
| 扩展元字符 | 作用 | 示例 |
|---|---|---|
| + | 匹配前面的子表达式1次以上 | go+d,将匹配至少一个o,如god、good、goood等 |
| ? | 匹配前面的子表达式0次或者1次 | go?d,将匹配gd或god |
| () | 将括号中的字符串作为一个整体 | g(oo)+d,将匹配oo整体1次以上,如good、gooood等 |
| | | 以或的方式匹配字符串 | g(oo|la)d,将匹配good或者glad |
-
匹配前面的子表达式1次以上
-
匹配前面的子表达式0次或者1次
-
将括号中的字符串作为一个整体
-
以或的方式匹配字符串
实例1:匹配电话号码
匹配要求:
- 匹配 025 开头的区号。
- 电话号码要5 或者 8开头的八位数。
- 格式如下:
- 区号 号码
- 区号-号码
- 区号号码
- 123
- 要求全号码格式匹配
操作:
-
准备一个包含号码的文档
-
进行匹配
实例2:匹配电子邮箱
电子邮箱格式:
用户名@子域名.[二级域名].顶级域
要求:
- 用户名:长度要求在6-18位,任意大小写英文,任意数字,除了@符号和空格以外的其它任意符号字符,开头只能是 _ 或者字母
- 子域名.[二级域名]:长度任意,符号只能包含 - _ .
- . 顶级域名:长度在2-5,任意大小写英文
- 完整匹配
实现各部分:
用户名长度要求在6-18位 {6,18}
除了@符号和空格以外的其它任意符号字符 [^@ ]
开头只能是 _ 或者字母 ^[a-zA-Z_]
长度任意,符号只能包含-_. [a-zA-Z0-9-_.]+
长度在2-5,任意大小写英文 .[a-zA-Z]{2,5}
操作:
-
准备一个包含邮箱的文档
-
进行匹配