正则表达式用于多种编程语言,这里使用Linux中的grep
程序示例。
下面这三个表用作参考:
表 1 正则表达式中的元字符
元字符 | 含义 | |
---|---|---|
. |
匹配任意单个字符(除换行符) | |
^ |
锚:匹配行的开头 | |
$ |
锚:匹配行的末尾 | |
\< |
锚:匹配单词的开头 | |
\> |
锚:匹配单词的末尾 | |
[list] |
匹配list中的任意一个字符 | |
[^list] |
匹配不在list中的任意一个字符 | |
() |
将括号中的内容视为一个单独单元 | |
` | ` | 选择其中之一匹配 |
\ |
从字面上解释元字符 |
表 2 正则表达式中的重复运算符
运算符 | 含义 |
---|---|
* |
匹配0次或者多次 |
+ |
匹配1次或者多次 |
? |
匹配0次或1次 |
{n} |
匹配n次 |
{n,} |
最少匹配n次 |
{0,m} |
最多匹配m次 |
{n,m} |
最少匹配n次,最多匹配m次 |
表 3 正则表达式中的预定义字符类(Linux)
类 | 含义 |
---|---|
[:lower:] |
小写字母 |
[:upper:] |
大写字母 |
[:alpha:] |
字母 |
[:alnum:] |
字母、数字 |
[:digit:] |
数字 |
[:punct:] |
标点符号 |
[:blank:] |
空格或制表符(空白符) |
匹配字符
在正则表达式中,.
匹配除换行符外的任意单个字符,下面的命令从文件water.txt
中匹配一个字符串,这个字符串以wa
开头,之后是两个任意字符(除换行符),最后是r
:
$ cat water.txt | grep 'wa..r'
它可能匹配到water
、waXEr
、waslr
等等这样的字符串。
[list]
表示匹配list中的任意单个字符,比如[wW]ater
匹配water
和Water
字符串:
$ cat water.txt | grep '[wW]ater'
也可以使用表 3中的预定义字符类表示一个范围,比如[[:lower:]]at
匹配以任意小写字母开头的,之后是at
的字符串:
$ cat water.txt | grep '[[:lower:]]at'
[4-6]
这样的字符类表示匹配数字4至数字6之间的任意单个字符。
匹配单词
now
可以匹配单词now
、know
和其他包含now
的字符串。
如果想要匹配单词know
,那么需要使用\<
表示单词的开头,\>
表示单词的结尾,就像下面这样:
$ cat water.txt | grep '\<[kK]now\>'
这条命令匹配单词know
和Know
。
匹配行
使用^
表示行的开头,$
表示行的结尾,下面的命令匹配以Water
开头的行:
$ cat water.txt | grep '^Water'
重复运算符
最后,介绍一下重复运算符。
如果想要匹配这样一个字符串,它以w
开头,之后是任意的字符(除换行符)重复任意多次,这怎么表示呢?这时就需要使用重复运算符*
了,它表示匹配0次或者任意多次,其他的重复运算符请查看表 2.
匹配这样的字符串需使用下面的命令:
$ cat water.txt | grep 'w.*'