示例:
可以使用wc命令统计这些单词的数量
♡♡字符“^”和“$”分别用于匹配行首和行尾,上面的意思就是匹配所有以a开头,t结尾的单词,两者可以不用同时使用
♡♡ 在正则表达式中,句点“.”用于匹配除换行符之外的任意一个字符。例如
.at
能够匹配出诸如cat/sat/#at等字符串。
在这里既然句点表示上面的那个意思,那怎么匹配句点本身呢?
♡♡这里就需要转义字符“\”,“\”可以取消所有元字符的特殊含义,例如“\.”匹配句点“.”,“\[”匹配左方括号,“\\”用于匹配“\”
很多时候,为了限定at前面的那个字符只能是小写字母,可以这样写正则表达式
[a-z]at
♡♡ 方括号“[]”用于指定一个字符集,无论“[]”中有多少东西,在实际工作时只能匹配其中一个字符。
比如
[abc]
只能匹配a或b或c,而不能匹配ab,abc,bc或者3个字母中其他任意组合。
♡♡使用连字符“-”描述一个范围,比如
[a-zA-Z]
表示匹配所有的英文字母,数字也可以用范围来指定[0-9]
♡♡想要让[a-z]at能够严格地匹配一个单词,需要为它加上一对分隔符“\<”和“\>”.
为什么bat's也会被匹配进来呢?
因为正则表达式中对单词的定义是:指两侧由非单词字符分隔的字符串。bat's符合,可以被匹配;如“a#$bat”分别由标点$和行尾分隔,符合单词的定义也可以被匹配
非单词指的是字母、数字、下划线以外的任何字符。
如果去掉这个分割符的话,就会查找出下面这种情况
♡♡用户有时候希望某个字符能够不止出现一次,下面是用于重复匹配的符号
* | 重复0次或更多次 |
+ | 重复一次或更多次 |
? | 重复0次或1次 |
{n} | 重复n此 |
{n,} | 重复n次或更多次 |
{n,m} | 重复不少于n次,不多于m次 |
♡♡反义:“^”表示除了这个字符,其他都可以,例如
[^wer]表示匹配除了w/e/r的所有字符;
注意“^”在表示行首和反义时在位置上的区别,例如匹配所有不以字母y开头的行:^[^y]
♡♡子表达式(分组):
示例:(or){2,}表示匹配所有or重复2次或更多次的行。如果去掉or两边的括号,那么这个正则表达式匹配的是 字母o后面紧跟2个或更多字母r的行
♡♡分支:以“|”竖线表示,例如^h|t$表示匹配以h开头或者t结尾的字母。
再看Jan(uary| |\.)
紧跟着开头三个字母Jan的是一个子表达式(用括号限定),两个分支元字符“|”分隔了三个字符串,分别是uary、空格、句点(注意描述句点需要使用转义符号“\”),这意味着January或Jan或Jan.这样的字符串都能被匹配。