Shell编程——正则表达式基础与扩展

正则表达式基础
 
Linux Shell以一串字符作为表达式向系统传达意思。元字符(Metacharacters)是用来阐释字符表达式意义的字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。正则表达式是由一串字符和元字符构成的字符串,简称RE(Regular Expression)。正则表达式的主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。
 
正则表达式完成了数据的过滤,将不满足正则表达式定义的数据拒绝掉,剩下与正则表达式匹配的数据。
 
正则表达式的基本元素包括普通字符和元字符。POSIX标准将正则表达式分为两类:基本的正则表达式和扩展的正则表达式,大部分Linux应用和工具仅支持基本的正则表达式。
 
 
基本的正则表达式元字符集合及其意义:
 
*              #0个或多个在*字符之前的那个普通字符
 
.              #匹配任意字符
 
^              #匹配行首,或后面字符的非
 
$              #匹配行尾
 
[]            #匹配字符集合
 
\              #转义符,屏蔽一个元字符的特殊意义
 
\<\>          #精确匹配符号
 
\{n\}          #匹配前面字符出现n次
 
\{n,\}        #匹配前面字符至少出现n次
 
\{n,m\}        #匹配前面字符出现n~m次
 
 
 
空行的表示方法: ^$
 
匹配只包含一个字符的行: ^.$
 
 
 
Linux系统对大小写是敏感的,并且支持字母排序,因此,Linux中有大写字母序列和小写字母序列,两者是分开的。
 
例:匹配字母
 
[a-z]          #所有小写字母
 
[A-Z]          #所有大写字母
 
[b-p]          #小写字母b~p
 
 
 
“^”符号表示匹配行首,但是,“^”符号放到”[]”符号中就不再表示匹配行首了,而是表示取反符号。如:[^b-p]表示匹配不在b~p范围内的字符。
 
\<the\>正则表达式精确匹配the这个单词,而不匹配包含the字符的单词,如then。
 
 
正则表达式的扩展
 
除了正则表达式的元字符之外,awk和Perl等Linux工具还支持正则表达式扩展出来的一些元字符。
 
扩展的正则表达式元字符及其意义:
 
?                #匹配0个或1个在其之前的那个普通字符
 
+                #匹配1个或多个在其之前的那个普通字符
 
()              #表示一个字符集合或用在expr中
 

|                #表示“或”,匹配一组可选的字符


正则表达式的作用主要有三:

  • 验证数字是否符合特定模式;
  • 利用正则表达式找到特定文本而后删除或者替换文本;
  • 按模式匹配在字符串中查找查找匹配子字符串。

正则表达式就是有普通字符以及特殊字符(称为元字符)组成的文字模式。元字符前面的字符称为前导符,元字符按功能又分为限定符、定位符等类别,下面对常用的元字符进行列表说明。

常见元字符

说明

\s 匹配单个空格,包括tab键和换行符

\S 匹配出单个空格符之外的所有字符,\S与\s互为逆运算

\d 匹配从0~9的数字

\w 匹配字母,数字或者下划线字符

\W 匹配所有与\w不匹配的字符,\W与\s互为逆运算

\cx 匹配由x指明的控制字符。
 
\f 匹配一个换页符,等价与\x0c和\cL

\n 匹配一个换行符,等价于\x0a和\cJ

\r 匹配一个回车符,等价于\x0d和\cM

\t 匹配一个制表符,等价于\x09和\cI

\v 匹配一个垂直制表符。等价于\x0b和\cK

. 用于匹配除换行符之外的所有字符

常见限定符说明

* 匹配前导字符出现零次或者多次

+ 匹配前导字符出现一次或者多次

? 匹配前导字符出现零次或者一次

{n} 匹配前导字符出现n次,n>=0;

{n,} 匹配前导字符至少出现n次,n>=0;

{n,m} 匹配前导字符至少出现n次,最多出现m次;m>n>=0;

定位符说明

^ 匹配模式必须出现在目标字符串开头

$ 匹配模式必须出现在目标的结尾

\b 匹配模式必须出现在目标字符串的开头或者结尾的两个边界之一

\B 匹配对象必须位于目标字符串的开头和结尾的两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾

正则表达式匹配模式的范围指定符

[] 限定的模式指定了其中一个字符的出现的可能。如/[A-Z]/表示匹配从A到Z任何一个字符;

() 限定的模式指定()里包含的内容必须同时出现在对象中。如/(abc)[0-9]/意思是目标字符串中出现的abc1,abc2...abc9中9个中的任何一个,而不是ab1,a2等;

| 类似于逻辑运算中的“或”运算,如:/sb|a/表示与目标对象的"sb","a"中任何一个相匹配;

当^符出现在[]中时,表示取否定运算。
 
字符转义与优先级顺序

在匹配模式需要使用元字符时,需要使用转移字符“\+元字符”表示,如查找“12*”模式,我们可以使用/12\*/表示;
 
正则表达式在匹配过程中是按照从左向右的顺序进行的,其操作符具有一定的优先级顺序
 
 
优先级顺序

优先级  操作符                      说明

1      \                            转义符

2    (),(?:),(?=),[]              圆括号和方括号

3    *,+,?,{n},{n,},{n,m}          限定符

4    ^,$,\anyMatchcharacter        位置顺序

5      |                            或操作

linux








你可能感兴趣的:(Shell编程——正则表达式基础与扩展)