初解正则表达式
Posted 丁CCCCC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初解正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式
用于判断语句中检查某一字符串是否满足某一种格式
概述
- 正则表达式由普通字符和元字符组成
- 普通字符包括大小写紫米、数字、标点符号和其他的符号
- 元字符则是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(也就是元字符前面的字符)在目标对象中的出现模式
常见元字符
字符 | 作用 | 举列 |
---|---|---|
\\ | 转义字符,用于取消特殊符号的含义 | \\ !、\\ n |
^ | 匹配字符串开始的位置 | ^a、 ^the、 ^ [a-z] |
$ | 匹配字符串结束的位置 | Word$、^ $匹配空行 |
. | 匹配除 \\n 之外的任意一个字符 | go.d、g…d |
* | 匹配前面子表达式0次或者多次 | goo*d、go.*d |
[ 自定义 ] | 匹配自定义中的一个字符 | [ ^0-9 ]、[ ^A-Z0-9 ]、[ ^a-z ]匹配任意一位非小写字母 |
[ ^自定义 ] | 匹配任意非自定义列表中的一个字符 | [ ^0-9 ]、[ ^A-Z0-9 ]、[ ^a-z ] 匹配任意一位非小写字母 |
\\ {n\\ } | 匹配前面的子表达式n次 | go{2}d、’[ 0-9 ] \\ { 2,\\ }'匹配两位数字 |
\\ {n,\\ } | 匹配前面的子表达式不少于n次 | go{2,3\\ }d、’[0-9]\\ {2,}’ 匹配两位及两位以上数字 |
\\ {n,m\\ } | 匹配前面的子表达式n到m次 | go\\ {2,3}d、’[0-9]\\ {2,3\\ }’ 匹配两位到三位数字 |
注意:egrep、awk 使用 {n}、{n,}、{n,m} 匹配时,"{ }" 前不需要加 " \\ "
测试
echo $! # 不加\\的!
90379
echo $\\! # 转义后
$!
grep "^1" cc.txt # 查找1开头的行
111Z
grep "3$" cc.txt # 查找3结尾的行
333
grep "1.1" cc.txt # 这里.表示匹配1
111Z
grep "2.2" cc.txt # 匹配2
222
grep "1*1" cc.txt # *表示0或者多次匹配1
111Z
1111111ZZZZ
grep "[A-Z]" cc.txt # 所有字母A-Z的行
A
B
C
4D
E
F
G
H
111Z
1111111ZZZZ
grep "[^A-Z]" cc.txt #所有字符除了A-Z的行
4D
111Z
222
333
1111111ZZZZ
grep "[0-9]\\{2\\}" cc.txt # 匹配两位数字
111Z
222
333
1111111ZZZZ
grep "[0-9]\\{4,\\}" cc.txt # 匹配四位及以上的
1111111ZZZZ
扩展元字符
字符 | 作用 | 举列 |
---|---|---|
+ | 匹配前面子表达式1次以上 | go+d,将匹配至少一个o,比如god、good、goood等 |
? | 匹配前面子表达式0次或1次 | go?d, 只能匹配 gd 或者 god |
() | 将括号中的字符串作为一个整体 | g(oo)d , 将匹配 oo 整体一次以上,比如good、gooood、gooooood |
丨 | 以或的方式匹配字条串 | g(oo丨la)d, 将匹配 good 或者 glad |
测试
扩展的字符支持的工具是egrep和awk
所以grep需要-E 或者直接egrep
grep -E "1+1" cc.txt # 一次以上的1,111/1111以上都匹配
111Z
1111111ZZZZ
grep -E "?A" cc.txt # 一次或者0次,这里相当于没有匹配,直接显示A
A
grep -E "1(1111)1" cc.txt # 整体匹配
1111111ZZZZ
grep -E "4(D|E)4" cc.txt # 选择匹配
4D4
4E4
以上是关于初解正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性