一、正则表达式是什么
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
最重要的是字符串匹配。
二、正则表达式与通配符
1、通配符
- 用来匹配文件名
- * 匹配任意多个(0~n)字符
- ? 匹配任意一个字符
- [] 匹配中括号内的任意一个字符
- Is、find、cp命令
2、正则表达式
- 用来匹配文件中的字符串
- 对大多数语言,都有正则表达式,但是绝大多数,没有通配符的概念。
- grep、awk、sed命令支持正则表达式
正则是包含匹配,通配符是完全匹配。
三、基础正则表达式
1、* 前一个字符匹配0次或任意多次
- ”a*“ 匹配所有内容 整个文档
- "aa*" 匹配至少包含有一个a的行
- ”aaa*“ 匹配至少包含两个连续a的字符串
2、. 匹配除了换行符外任意一个字符
- s..d会匹配在s和d这两个字符间一定有两个字符的单词
- s.*d会匹配在s和d这两个字符间有任意字符的单词
- .* 匹配所有内容
3、^ 匹配行首
- ^hell会匹配以hello开头的行
- ^a匹配以a开头的行
4、$ 匹配行尾
- b$匹配b为尾的行
- ^$匹配空白行
5、[] 匹配中括号中指定的任意一个字符
- s[ao]id 可以匹配到said和soid
- [0-9] 可以匹配到 1 234 dd2 6aaa都可以(再说一遍正则是包含匹配)
- ^[0-9] 匹配到以数字开头的行
- [0-9]$ 匹配到数字结尾的行
- ^[^a-z] 匹配到不以小写字母开头的行
- ^[^a-zA-Z]匹配到不以字母开头的行
- [^a-z] 列出不含小写字母的话行
- 中括号里的^代表取反
6、\ 转义符 让特殊符号丧失特殊作用
- ”\.$“
- .此处就代表点,以点结尾的行
7、”\{n\}“ 表示前面的字符恰好出现n次
- "a\{3\}"匹配a字母至少连续出现三次的字符串
- "xc\{3\}u" 匹配x和u之间有三个c的行
- "[0-9]\{3\}"匹配包含连续的三个数字的字符串
8、"\{n,\}" 表示前面的字符至少出现n次 跟上面很像 要看实验
- ”\{n,m\}“匹配其前面的字符至少出现n次,最多出现m次
- "sa\{1,3\}i" 匹配在字母s和i之间有最少一个a,最多三个a
四、例子:提取规范的日期和IP
1、匹配日期
- [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
- YYYY-MM-DD
- [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
- 192.168.0.1
说明:所有IP和日期都能被匹配,但是能被匹配的不一定是日期和IP地址。