Regular Expression-正则表达式(一)

正则表达式,一组具有特定含义的字符串组成,用于匹配和替换文本。

相信大家在学习正则表达式的时候资料也是五花八门的,我一开始也是从linux的一些基础书籍上学的,不是很详细,有很多误区,比如【\d】这个数字匹配,用grep怎么也没有办法匹配数字,今天就来聊一下正则表达式的学习和使用。

首先是为什么grep不能直接匹配【\d】,是因为正则表达式有三大分类。

一、基本正则表达式(Basic Regular Expression,Basic RegEx/BREs)

二、扩展正则表达式(Extended Regular Expression,Extended RgeEx/EREs)

三、Perl的正则表达式(Perl Regular Expression,Perl RegEx/PREs)

grep不加任何参数,只支持BREs,BREs不支持【\d】,PREs支持【\d】,所以需要加参数【-P】,grep要想支持【EREs】需要加【-E】参数(和egrep支持范围一致,egrep要想支持PREs也需要【-P】参数)。其他linux文本工具sed支持BREs和EREs(默认是BREs,【-r】参数支持EREs),awk支持EREs。

以上三类正则匹配分类在支持的正则表达式上有所区别,下表是三类正则匹配常用表达式的支持比较。

字符

说明

BREs

EREs

PREs

\

转义

\

\

\

^

匹配行首(结合[]的时候有非操作的含义,awk是匹配字符串的开始)

^

^

^

$

匹配行尾(awk匹配字符串结束)

$

$

$

^$

匹配空行

^$

^$

^$

^string$

匹配行

^string$

^string$

^string$

\<string

匹配string开头的单词,同\bstring

\<string

\<string

不支持,支持\bstring

string\>

匹配string结尾的单词,同string\b

string\>

string\>

不支持,支持string\b

\<string\>

严格匹配单词,同\bstrinbg\b

\<string\>

\<string\>

不支持,支持\bstring\b

(regex)

匹配表达式

不支持,不报错

(regex)

(regex)

匹配前面的子表达式0次或1次,同{0,1}

不支持

?

?

\?

匹配前面的子表达式0次或1次,同\{0,1\}

\

不支持

不支持

非贪婪模式匹配,在*,+,?{m,n}后面匹配最少

不支持

不支持

不支持

.

匹配换行符外的任意单个字符(awk中可以匹配换行符)

.

. (^$)|(.)可以匹配换行符

. (^$)|(.)可以匹配换行符

*

匹配前面的子表达式0次或者多次,同{0,}

*

*

*

\+

匹配前面的子表达式1次或者多次,同\{1,\}

\+

不支持

不支持

+

匹配前面的子表达式1次或者多次,同{1,}

不支持

+

+

{n}

匹配前面的子表达式n次,n可以是0

不支持(支持\{n\})

{n}

{n}

{n,}

匹配前面的子表达式大于等于n次,n可以是0

不支持(支持\{n,\})

{n,}

{n,}

{n,m}

匹配前面的子表达式n次到m

不支持(支持\{n,m\})

{n,m}

{n,m}

x|y

逻辑匹配或,x|y,匹配或者y

不支持(支持x\|y)

x|y

x|y

[0-9]

匹配09中任意一个数字

[0-9]

[0-9]

[0-9]

[xyz]

字符集合,[]中的元字符被当作普通字符处理

[xyz]

[xyz]

[xyz]

[^xyz]

取反字符集合(awk中匹配的时候会加上换行符)

[^xyz]

[^xyz]

[^xyz]

[A-Za-z]

匹配一个大小写字母字符(范围需要递增,顺序不能改)

[A-Za-z]

[A-Za-z]

[A-Za-z]

[^A-Za-z]

匹配一个非大小写字符字符(范围需要递增,顺序不能改)

[^A-Za-z]

[^A-Za-z]

[^A-Za-z]

\d

匹配09中任意一个数字字符,同[0-9]

不支持

不支持

\d

\D

匹配09外任意一个字符,同[^0-9]

不支持

不支持

\D

\s

匹配任何空白字符,包括空格、制表符、换页符等,同[\f\n\r\t\v]

不支持

不支持

\s

\S

匹配任何非空白字符,同[^\f\n\r\t\v]

不支持

不支持

\S

\w

匹配单个下划线、字母和数字字符,同[A-Za-z0-9_]

\w

\w

\w

\W

匹配单个非下划线、字幕和数字字符,同[^A-Za-z0-9_]

\W

\W

\W

\b

匹配一个单词边界,在单词前面都加,能完全匹配

\b

\b

\b

\B

匹配一个非单词边界,在单词前后都加,能匹配某些长单词的中间字符

\B

\B

\B

\t

横向制表符

不支持

不支持

\t

\v

垂直制表符

不支持

不支持

\v

\n

换行符

不支持

不支持

\n

\f

换页符

不支持

不支持

\f

\r

回车符

不支持

不支持

\r

\\

转义符本省

\\

\\

\\

\cx

ctrl+x(例如xM的时候,ctrl+M/回车)

不支持

不支持

\cx

\xn

匹配n,n为十六进制转义值,十六进制转义值必须为确定的两个数字长,\x41匹配A\x041则等价"\x04"@"1"

不支持

不支持

\xn

\num

匹配num,其中num是一个正整数,表示对所获取的匹配的引用

不支持

\num

[:alnum:]

匹配任何一个字母或者数字,同[A-Za-z0-9]使用时候注意加[][[:alnum:]]

[:alnum:]

[:alnum:]

[:alnum:]

[:alpha:]

匹配任何一个字母,同[A-Za-z]

[:alpha:]

[:alpha:]

[:alpha:]

[:digit:]

匹配任何一个数字,同[0-9]

[:digit:]

[:digit:]

[:digit:]

[:lower:]

匹配任何一个小写字母,同[a-z]

[:lower:]

[:lower:]

[:lower:]

[:upper:]

匹配任何一个大写字母,同[A-Z]

[:upper:]

[:upper:]

[:upper:]

[:space:]

匹配任何一个空白字符,制表符和空格等

[:space:]

[:space:]

[:space:]

[:blank:]

匹配空格和制表符

[:blank:]

[:blank:]

[:blank:]

[:graph:]

匹配看的见的可以打印的字符

[:graph:]

[:graph:]

[:graph:]

[:print:]

匹配看的见的可以打印的字符

[:print:]

[:print:]

[:print:]

[:cntrl:]

匹配任何一个控制字符

[:cntrl:]

[:cntrl:]

[:cntrl:]

[:punct:]

匹配任何一个标点符号

[:punct:]

[:punct:]

[:punct:]

[:xdigit:]

匹配任何一个十六进制数

[:xdigit:]

[:xdigit:]

[:xdigit:]

上表基本包含了常见正则表达式的内容,断断续续磨了好久才弄完,这两天又搞什么slurm,又写脚本测试的,越发觉得awk,sed的重要性,先学正则还是不错的。以上的内容虽然都实操过了,但是没记录,下一篇再讲讲上面这些字符的分类和实际操作吧。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇