正则表达式的单字符
特定字符
1'X'
范围字符
1[]
2[^]
第二个里面的^
是取反向的意思
任意字符
1. # 代表了任意字符
2
3\. # 被转义,只有本身的意思
4
5[.] # 被范围字符括住,只有本身的意思
正则表达式其他符号
- 边界字符:头尾字符
1^ # 文本的开始匹配
2
3e.g ^root
注意当^
在[]
里面的时候,代表的是反向。而不是字符开头。
1$ # 文本的结束匹配
2
3e.g fales$
1^$ # 代表了空行
元字符(代表普通字符或特殊字符)
1\w #小写
2
3匹配任何字类字符,包括下划线(A-Za-z0-9)
1\W #大写
2
3匹配任何非字类字符 [^A-Za-z0-9]
4就是那些 ./;'\
1\b
2
3代表单词的分隔
4
5e.g
6
7匹配 :x:
8
9grep '\bx\b' files.txt
10
字符串
1'root' '1000' 'm...c'
2
3'[A-Z][a-z]' '[0-9][0-9]'
4
5
6grep '[0-9][0-9]' files.txt
7符合的不只是两位数
8这些都能够符合 232365 23 64 2363
9
10若要取两位数
11就给分隔符
12
13grep ‘\b[0-9][0-9]\b' files.txt
正则表达式字符组合
1* 01234567.....
2+ 1234567......
3? 0 1
(se)*
是代表对se
的重复
重复特定次数 {n,m}
1* {0}
2
3+ {1,}
4
5? {0,1}
6
7grep '[0-9]\{2,3\}' files.txt #匹配2-3位在数字0-9这个范围的数字
8
任意字符串的表示
1.*
2
3因为.*概况得较多,应该用分隔字符 \b 和范围字符 [] 进行限定
逻辑的表示
1|
2
3'/bin\(false\|true\)'
正则表达式案例
找出符合4-10位的QQ号
匹配15位或18位身份证号(支持带X的)
1grep '^[1-9]([0-9]{13}|[0-9]{16})[0-9Xx]' #没有转义
匹配密码
1grep '^\w\+$' qq.txt
正则总结
- 正则很无情
- 正则很大度
- 别忘了''