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