正则表达式

由普通字符和元字符( Metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。

元字符表达的是不同于字面本身的含义。元字符通常由各种执行模式匹配操作的程序(如vi、grep、sed、 awk、 python)来解析,在最简单的情况下,一个正则表达式看上去就是一个普通的查找模式。例如,正则表达式“testing"中没有包含任何元字符,它可以匹配“testing"  和“testing123” 等字符串,但不能匹配“Testing”。

常用元字符

元字符

描述

举例

^

匹配行首

^love

$

匹配行尾

love$

.

点,匹配单个字符

l.ve匹配l开始、一个任意字符、ve结尾

\

将下一个字符标记为特殊字符

love\.

*

匹配前导符任意多次

"abc*" 能匹配 ab abc abcd abcde abcdef

[xyz]

字符集合,匹配所包含的任意一个字符

[lL]ove

[^xyz]

匹配未包含的任意字符


\< \>

词首词尾定义符

\<the 能匹配'for the ok' 不能匹配 'other'

x\{m,n\}

字符x出现m到n次

也可 x\{m\} 出现m次 x\{m,\} 出现m次以上

扩展正则表达式元字符

+

匹配1或多个前导字符

"[a-z]+ove"

loove looove love iloveyou

匹配0或1个前导字符

lo?ve  匹配出 love lve

a|b

匹配a 或b


( )

匹配括号中的全部字符


在程序中,要判断数输入的电话号码地址等,用普通的字面字符是不够的,需要使用相应的字符模式的方法来描述,就是字符簇。更多情况下,可能要匹配一个单词或一组数字,跟在字符或字符簇后面的花括号({})用来确定前面的内容重复出现的次数。

几个常用的的字符簇

.*

所有行

^$

空行

^[a-zA-Z_]$

所有的字母和下划线

^[[:alpha:]]{3}$

所有的三个字母的单词

^a$

匹配字母a

^a{2,}$

包含多于两个a的字符串

^[A-Z]..$

开头一个大写,最后2个任意字符

^[A-Z][a-z ]*3[0-5]

一个大写开头,0到多个小写,3,最后是0-5的一个数字

[a-z]*\.

0到多个小写字母,最后一个点

^ *[A-Z][a-z][a-z]$

0到多个空格开头,一个大写,一个小写,再一个小写结尾

^[A-Za-z]*[^,][A-Za-z]*$

0到多个字母开头,非逗号,0到多个英文结尾

5{2}2{3}\.

5两次2三次和一个点

^[ \t]*#

有0到多个,空格或者tab开头的行,的注释行

:1,$ s/\(square\) and \(fair\)/\2 and \1/ 

换个位置