正则表达式

正则表达式的单字符

特定字符

1
'X'

范围字符

1
2
[]
[^]

第二个里面的^ 是取反向的意思

任意字符

1
2
3
4
5
.  # 代表了任意字符

\. # 被转义,只有本身的意思

[.] # 被范围字符括住,只有本身的意思

正则表达式其他符号

  • 边界字符:头尾字符
1
2
3
^  # 文本的开始匹配

e.g ^root

注意当^[]里面的时候,代表的是反向。而不是字符开头。

1
2
3
$  # 文本的结束匹配

e.g fales$
1
^$  # 代表了空行

元字符(代表普通字符或特殊字符)

1
2
3
\w  #小写

匹配任何字类字符,包括下划线(A-Za-z0-9)
1
2
3
4
\W  #大写

匹配任何非字类字符 [^A-Za-z0-9]
就是那些 ./;'\
1
2
3
4
5
6
7
8
9
\b

代表单词的分隔

e.g

匹配 :x:

grep '\bx\b' files.txt

字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
'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

正则表达式字符组合

jpg
jpg

1
2
3
*  01234567.....
+ 1234567......
? 0 1

jpg

(se)*是代表对se的重复

jpg

重复特定次数 {n,m}

1
2
3
4
5
6
7
*   {0}

+ {1,}

? {0,1}

grep '[0-9]\{2,3\}' files.txt #匹配2-3位在数字0-9这个范围的数字

任意字符串的表示

1
2
3
.*

因为.*概况得较多,应该用分隔字符 \b 和范围字符 [] 进行限定

逻辑的表示

1
2
3
|

'/bin\(false\|true\)'

正则表达式案例

找出符合4-10位的QQ号

qq

匹配15位或18位身份证号(支持带X的)

jpg

1
grep '^[1-9]([0-9]{13}|[0-9]{16})[0-9Xx]'  #没有转义

匹配密码

1
grep '^\w\+$' qq.txt

正则总结

jpg

  • 正则很无情
  • 正则很大度
  • 别忘了’\’
0%