Linux重新学习--shell--正则表达式

来源:互联网 发布:java中并且符号 编辑:程序博客网 时间:2024/05/21 10:37

1.常用的正则表达式

常用正则表达式表达式BRE/ERE模式意义\both转义.both匹配任一单个字符,NUL和换行符除外,*both匹配在他之前的任意数目个字符^both位于正则表达式的开头才有意义,表示一行的开头$both位于正则表达式的结尾才有意义,表示一行的结尾[   ]both表示匹配方括号内的任意一个字符,如果方括号内开头是^,则是不匹配任何一个字符\{n,m \}BRE区间表达式,表示重复出现的次数范围  \(  \)BRE用在后向引用中,具体可参照后面的内容\digitBRE用在后向引用中,具体可参照后面的内容{n,m}ERE 与  \{\}的功能相同+ERE匹配前面正则表达式的一个或者多个实例?ERE匹配前面正则表达式的零个或者一个实例|ERE匹配 | 前面或者后面的正则表达式()ERE匹配与方括号括起来的正则表达式群

2.单个字符的匹配

 单个字符分为普通的字符(常用的字母、数字、以及一些标点符号)和特殊的字符(已经被正则表达式采用的符号)。在进行单个字符匹配的时候有下面几种方式:

 1)使用.(点号), 点号即“任一字符的意思”, 例如 a.c与abc, adc 匹配;如果匹配模式中有特殊字符,则需要用 \ (反斜杠)来进行转义,去掉字符的特殊含义;

 2) 使用[ ](方括号), 方括号允许将你想匹配的字符放在括号内, 例如 a[bc]d将会与abd, acd 匹配。当然,如果放置在方括号内的字符集合是你不相匹配的字符,那么就需要在字符串的最前面加上 ^(取反的意思)。 如果你觉得将所有要匹配的字符一个一个的敲进方括号内比较麻烦的话,那么还可以在方括号内使用其他的正则表达式,例如 -(破折号)表示一个范围内的所有字符,[a-b1-9];

对于方括号,为了匹配非ASCII码,方括号又有了其他的用法, 第一个: [. .] 排序, 即指定一个成组的项目顺序的操作,这将会会使[. .]内部的字符串被当做成一个单一的字符,例如[ab[.cd.]ef] 是指匹配 a b e f,以及cd,这里cd被当做一个字符; 第二个:[= =]等价字符集,即使不同的字符在匹配时视为相同的字符;第三个:特殊字符集[: :],例如[[:digit:]]将会匹配所有的数字,[[:alpha:]]将会匹配所有的字母;

PS:在方括号内,所有的元字符(也就是特殊字符)都失去了原本的意义,都将被认为是普通的字符,如果想让 [ 和 ] 进入到方括号内择取要将 ] 放在开头 [ 放在最后。

3) 后向引用

也就是\(\)和 \n 的用法,在使用时,首先将表达式使用\(   \)包围起来,然后在后面使用\n,来引用前面的匹配字符串。


3. 多个字符的匹配

使用点号和方括号可以匹配单个字符,但是这样有时候用起来有一点点麻烦,那么如何使用正则表达式使用单个表达式来匹配多个字符呢?

1)最简单的当然就是 * (星号), 即,匹配 0 个或者多个前面的单个字符,例如与ab*c匹配的字符串有ac abc abbc abbbc等;

使用*号有一个缺点就是你不能指定要匹配字符的个数,为了能够有更加具体的匹配模式所有我们有了区间表达式;

2)区间表达式 \{ \}

区间表达式一般有三种

 \{n\} : 匹配的结果出现n次;

 \{n,\} : 匹配的结果出现至少n次;

 \{n,m\} :匹配的结果出现n~m次。

对于m, n,也就是字符重复出现的次数啦,系统有明确的限制哦,这个限制就是RE_DUP_MAX,我们可以通过getconf命令来获得。


4.锚点

也就是行首 (^) 和行尾($),so easy !

PS:^ 与$志在模式的开头和结尾处才是正则表达式,如果用在字符串的中间则他们只是普通的字符而已。


5.正则表达式的优先级

what,正则表达式还有优先级一说!?我一直以为只要从左向右就可以了,但是书里头说还有优先级,没办法,就让我们来看一看吧

下表的优先级从高到低,没有办法,只能记住。

正则表达式优先级运算符表示意义[..] [==] [::]用于子夫排序的方括号符号\meta转义的元字符[]方括号\(\)   \digit后向引用表达式* \{\}单个字符多次重现普通字符 ^ $锚点

以上讲的是基本正则表达式(BRE), 还有扩展正则表达式(ERE),号称比BRE的功能要多,他们之间并不是完全兼容的,有一些元字符的含义不太一样。关于ERE我们以后有时间再讲。


6.扩展正则表达式


0 0
原创粉丝点击