正则表达式

   正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。前两天博主学习了一些关于正则表达式的知识,当时感觉还晕晕的正则表达式_正则所以在这里总结了一些常用的内容,希望与大家一起学习。正则表达式_正则_02

  首先介绍一下什么是grep,它是文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。本文就利用grep这个工具来说明正则表达式的用法。

(一)基本正则表达式:

一、字符匹配:

1、 . 匹配任意单个字符

正则表达式_表达式_03

2、  [] 匹配指定范围内的任意单个字符

正则表达式_正则_04

3、  [^] 匹配指定范围外的任意单个字符

正则表达式_表达式_05

4、  [:alnum:] 或 [0-9a-zA-Z]  匹配任意大小写字母和数字

    使用如[:alnum:]此类的通配符时,需在其外面再加一对[]。

正则表达式_表达式_06


5、  [:alpha:] 或 [a-zA-Z] 匹配任意大小写字母

正则表达式_正则_07

6、  [:upper:] 或 [A-Z] 匹配任意大写字母

正则表达式_表达式_08

7、  [:lower:] 或 [a-z] 匹配任意小写字母

正则表达式_正则_09

8、  [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

正则表达式_正则_10

9、  [:digit:] 十进制数字 或[0-9]  匹配任意数字

正则表达式_表达式_11

10、  [:punct:] 标点符号

正则表达式_正则_12

二、匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数。

1、 *   匹配前面字符任意次,包括0次。贪婪模式:尽可能多的匹配

正则表达式_正则_13

2、 .*  任意长度的任意字符

正则表达式_正则_14

3、 \?  匹配其前面的字符0次或1次

正则表达式_表达式_15

4、 \+  匹配其前面的字符至少1次

正则表达式_表达式_16

5、 \{n\} 匹配前面的字符n次

正则表达式_正则_17

6、 \{\m,n\} 匹配前面的字符至少m次,至多n次

正则表达式_正则_18

7、 \{,n\} 匹配前面的字符至多n次

正则表达式_正则_19

8、 \{n,\} 匹配前面的字符至少n次

正则表达式_正则_20

三、位置锚定:定位出现的位置

1、 ^ 行首锚定,用于模式的最左侧

正则表达式_表达式_21

2、 $ 行尾锚定,用于模式的最右侧

正则表达式_表达式_22

3、 ^PATTERN$ 用于模式匹配整行

正则表达式_表达式_23

4、 ^$ 空行 

  表示开头和结尾连在一起,自然而然就是空行。

5、 ^[[:space:]]*$空白行

  表示以空白字符开头,中间匹配任意次空白字符,又是以空白字符结尾,自然就是空白行

6、 \<或\b 词首锚定,用于单词模式的左侧

正则表达式_正则_24

7、 \>或\b 词尾锚定,用于单词模式的右侧

正则表达式_正则_25

8、 \<PATTERN\> 匹配整个单词

正则表达式_正则_26

四、分组及引用:

分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理。

   分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中,这些变量的命名方式为\1,\2,\3.....

   \1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例: \(string1\+\(string2\)*\)

    \1:string1\+\(string2\)*

    \2:string2

后向引用:引用前面的分组括号中的模式所匹配字符,而不是模式本身。比如:匹配/file中的字符前边有ro,后边也有ro的行:

正则表达式_正则_27

(二)扩展的正则表达式:

egrep = grep -E

  扩展的正则表达式与基本正则表达式的元字符用法一样;而在进行次数匹配时,扩展的正则表达式中的? + {n} {m,n} 不用再加上\ ,在分组中()也不用加上\ ,其他的都一样,就不再详细举例,用几个实例来说明一下。

1、显示三个用户root、wang的用户名,UID和默认shell

cat /etc/passwd|grep -E "^(root|wang)\>"|cut -d : -f1,3,7

 ^(root|wang)\> 表示行首为root或者wang的行

 cut -d : -f1,3,7 表示取出以:为间隔的第1,3,7行

正则表达式_表达式_28

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

 cat /etc/rc.d/init.d/functions | grep -E "^.*\(\)"

正则表达式_表达式_29

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

 echo /etc/rc.d/init.d/functions | egrep -o "[^/]*$"

正则表达式_正则_30


   以上就是博主要跟大家分享的一些关于正则表达式的内容,如有不足之处,希望大家多多交流。

正则表达式_表达式_31