正则表达式

对于 2 + 4 算术表达式,2是(数字)字面值字符,+是操作符,而不能把+解释为普通字面字符,我们告诉计算机如何产生计算结果,而不是简单的告诉计算机返回6

关键术语:

1,(正则表达式),由字面值和元字符组成,描述了一种模式(pattern)或字符序列。

2,(元字符),元字符在正则表达式中有特殊的含义,就像2+4中的+符号一样,它不被用作字面值本身,而是表示一个操作符。元字符下辖两个基本的类型,例如 . 表示单个字符的元字符,而 * 表示如何修改前面的字符的元字符。

3,(字面值),除元字符外的任意字符,都被解释为只匹配它本身。

4,(字符类),在正则表达式中的有元字符 [ ] 括起来的字符集。

 

元字符汇总:

元字符

                           用途

.

除换行符外,匹配任意单个字符awk匹配任意单个字符,包括换行符,后同

*

匹配任意个,在它前面的字符。(包括由正则表达式指定的字符)

 

[....]

匹配方括号中的字符类中的任意单个字符。如果方括号中的第一个字符为脱字符(^),则表示否定匹配。连字符(-)表示数字范围。注意,元字符(无需转义)在方括号内都变成字面值(awk中需转义)。

^

如果作为正则表达式的第一个字符,则表示匹配行的开始。

$

如果作为正则表达式的最后一个字符,则表示匹配行的结尾。

\{n,m\}

sedgrep

匹配它前面单个字符出现的次数(包括由正则表达式指定的字符)。

\{n\} 匹配n次,\{n,\} 至少匹配n次,

\{n,m\} 匹配nm之间的任意次数。

\

匹配转义随后的元字符。

\<love

匹配包含以love开头的单词的行

love\>

匹配包含以love结尾的单词的行,\<love\> 匹配含有love单词的行

+

匹配前面的单个字符(正则表达式的)一次或多次出现,等价 \{1,\}

匹配前面的单个字符(正则表达式的)零次或一次出现,等价 \{0,1\}

 

|

指定正则表达式的联合,如果某行匹配其中的一个正则表达式,那么它就匹配该模式。例如 $ grep '^dog|^pander' in_file  匹配in_file中以dogpander开头的行。用单引号引住其中的模式,是为防止传递给shell解释。

 

()

对正则表达式分组,例如 ’Lab(oratorie)?s’ ,匹配Labs,和Laboratories

‘compan(y|ies)’ ,匹配company,和companies

注意大多数sedgrep不支持,但所有的awkegrep版本都支持。

{n,m}

awkegrep

匹配其前面的单个字符出现的次数(包括由正则表达式指定的字符)。

注:灰色部分,egrepawk支持。

 

一些细节:

1[字符类]中的特殊字符(注意限定在“字符类”范围内)。

字符

功能

\

awk中,字符类中的元字符需转义。

grepsed中,字符类中的元字符自动作为字面值匹配。

-

当它不在字符类中的第一个或最后一个位置时,表示的是一个范围。否则表示的是字面值本身。

^

仅当在字符类中的第一个位置时表示的是反转匹配。


2^$定位符的问题

sedgrep中,只有^$分别出现在正则表达式的开始和结尾才能发挥元字符的作用。在正则表达式的其它位置则会被当做字面值匹配。

awk中,无论^$定位符出现在正则表达式的哪个位置,它们总是发挥元字符的作用,要想使其作为字面值匹配,可用反斜杠转义。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值