【Linux操作系统学习笔记】三、正则表达式
一、正则表达式的基本输入方法
- 标准输入
- 基本命令
grep --color 'hei'
“ --color ” 表示以色彩标注出匹配的内容;
“ hei ” 是一个符合正则表达式语法的匹配模式,用于匹配内容
- 管道输入
- 作用:将一个程序的输出,作为另一个程序的输入,使用 “ | ” 符号
- 基本命令(1)
ls | cat
将ls原本输出到终端的内容,作为cat命令的输入,又cat命令输出出来
- 基本命令(2)
ls | grep --color 'Dog'
文件列表中所有包含 “ Dog ” 的文件名被匹配出来
- 基本命令(3)
grep --color 'itheima' /etc/passwd
从“ /etc/passwd ”文件中匹配出所有包含 ‘ itheima ’字符串的内容
二、POSIX 和 Perl 语法
- 默认支持 POSIX BRE 语法,“-E”可以切换到 POSIX ERE 语法,“-P”可以切换到Perl语法
- 基础语法
^ 匹配一行的开始
$ 匹配一行的结束
. 匹配一个任意字符
* 匹配它前面的字符零次或多次
.* 匹配多个任意字符
- pcretest命令
- 元字符、文本字符和转义字符
- 元字符
^ $ . *
- 文本字符 :普通的文本,如字母和数字等
- 转义字符:匹配 :**(^ $ . * )**等特殊字符
grep -P --color '[\^\$\*\\]'
例子:
- 使用 \x27 匹配单引号
例子:
- 分组
- 分组(又称 子模式、子匹配),用小括号“()”来实现
grep -P --color '(a-){3}'
- {3} 用于匹配前面的字符3次,如“ a{3} ”表示匹配“ aaa ”
- 如果不加小括号
- a-{3} 表示匹配 “ a— ”
- 如果加小括号
- (a-) 表示匹配 " a-a-a- "
- 如果不加小括号
三、正则表达式的语法规则
- 定位符
- 定位符用于确定富足的具体位置,如在字符串的头部和尾部
^ 匹配字符串开始的位置
$ 匹配字符串结尾的位置
^$ 匹配空行
- 示例:
- 选择符
- 若要查找的条件有多个,只要其中一个满足即可成立时,可以用选择符 “ | ” (可以理解为 “或”)
- 示例:
- 字符范围
- 当需要匹配某个范围内的字符时,可以用 " [ ] " 和连字符 " - " 来实现
[abc] 匹配字符a、b、c
[a-z] 匹配字母a~z范围内的字符
[a-zA-Z0-9] 匹配全部字母(包括大小写)和数字0~9的字符
- 在中括号中还可以用反义字符“ ^ ”,匹配不在指定范围内的字符
[^abc] 匹配除字符a、b、c以外的字符
- 点字符和限定符
四、正则表达式的应用案例
- 验证文件拓展名
\.(html|css|jsp)$
- 验证IP地址
- IP地址范围:0.0.0.0 到 255.255.255.255
- 将整个范围拆分为3个小范围:0-99,100-199、200-255
0~99: [1-9]?\d
100~199: 1\d{2}
200~255: 2([0-4]\d|5[0-5])
用 | 连起来:
0~255:( [1-9]?\d | 1\d{2} | 2([0-4]\d|5[0-5]))
- 加上分割符:
完整表达式 : ^(([1-9]?\d | 1\d{2} | 2([0-4]\d|5[0-5]))\.){3}( [1-9]?\d | 1\d{2} | 2([0-4]\d|5[0-5]))$
- 验证日期
- 基本日期:“年-月-日”
验证年:[1-9]\d{3}
验证月:[1-9]|1[0-2]
验证天:[1-9]|[1-2]\d|3[01]
- 完整表达式
^[1-9]\d{3}-([1-9]|1[0-2])-([1-9]|[1-2]\d|3[01])$