学科分类
目录

元字符

元字符指在正则表达式中具有特殊含义的专用字符,可以用来规定其前导字符(位于元字符之前的字符)在目标对象中出现的模式。正则表达式中的元字符一般由特殊字符和符号组成,常用的元字符如表1所示。

表1 常用元字符及其功能

元字符 说明
. 匹配任何一个字符(除换行符外)
^ 脱字符,匹配行的开始
$ 美元符,匹配行的结束
| 连接多个可选元素,匹配表达式中出现的任意子项
[] 字符组,匹配其中的出现的任意一个字符
- 连字符,表示范围,如“1-5”等价于“1、2、3、4、5”
? 匹配其前导元素0次或1次
* 匹配其前导元素0次或多次
+ 匹配其前导元素1次或多次
{n}/{m,n} 匹配其前导元素n次/匹配其前导元素m~n次
() 在模式中划分出子模式,并保存子模式的匹配结果

对于表1所提供的元字符,其详细用法如下所示:

1.点字符“.”

点字符“.”可匹配包括字母、数字、下划线、空白符(除换行符\n)等任意的单个字符,其用法示例如下所示:

(1)J.m:匹配以字母J开头,字母m结尾,中间为任意一个字符的字符串,匹配结果可以是Jam、Jom、J#m、Jim、J2m等。

(2).. :匹配任意两个字符,匹配结果可以是12、2n、@#等。

(3).m:匹配以任意字符开头,以m结尾的字符串,匹配结果可以是1m、@m、xm、_m、\tm等。

2.脱字符“^”和美元符“$”

脱字符“^”和美元符“$”分别用于匹配行头和行尾。若想匹配处于串开头的“cat”,可使用表达式“^cat”;若想匹配处于串结尾的“cat”,可使用表达式“cat$”。表达式及其可匹配到的内容示例如下所示:

(1)^cat:只能匹配行首出现的cat,例如category。

(2)cat$:只能匹配行尾出现的cat,例如concat

(3)^cat$:匹配只有cat的行。

(4)cat:可匹配到行中任意位置出现的cat。

(5)^$:匹配空行。

需要说明的是,以(1)中的模式“^cat”为例,虽然该模式会匹配到以字符串“cat”为首的行,但在理解时,应理解为“匹配以字符c开头,第二、第三个字符依次为a和t的行”。

3.连接符“|”

“|” 可将多个不同的子表达式进行逻辑连接,可简单地将“|”理解为逻辑运算符中的“或”运算符,匹配结果为与任意一个子表达式模式相同的字符串。示例如下:

(1)a|b|c|d :匹配字符a、b、c、d中的任意一个。

(2)cat|dog:匹配cat或dog。

(3)c|itheima:匹配字符c或字符串itheima。

4.字符组“[]”

正则表达式中使用一对中括号“[]”标记字符组,字符组的功能是匹配其中的任意一个字符,它也有“或”的含义,但与“|”不同,“|”既能匹配单个字符,亦能匹配字符串,但“[]”只能匹配单个字符。字符组的用法如下所示:

(1)arg[vs]:匹配以字符串arg开头,以字符v或s结尾的字符串,匹配结果可能是argv或args

(2)[cC]hina:匹配以字符c或C开头,以hina结尾的字符串,匹配结果可以是china或China。

(3)[z!?] :匹配z、!、、?中的任意一个。

字符组外的字符从前到后依次匹配,如在表达式“arg[vs]”中,字符组外的字符a、r、g的匹配方式是:先匹配a,再匹配r,之后匹配g;而字符组中所有字符都是同级的,没有先后顺序,匹配结果至多会选择字符组中的一个字符。

5.连字符“-”

连字符“-”一般在字符组中使用,表示一个范围,如字符组“[0-9]”表示匹配0-9之间的的一位数字,字符组“[A-Z]”表示匹配A-Z之间的一位大写字母,字符组“[a-z]”表示匹配a-z之间的一位小写字母。

6.匹配符“?”

元字符“?”表示匹配其前导元素0次或1次,示例如下:

(1)June?:匹配元字符“?”前的字符“e”0次或1次,匹配到的结果可以是june或july。

(2)July?:匹配元字符“?”前的字符“y”0次或1次,匹配到的结果恶意是jul或july。

7.重复模式

正则表达式中使用“*”、“+”和“{}”符号来限定其前导元素的重复模式,示例如下:

(1)ht*p:匹配字符“t”零次或多次,匹配结果可以是hp、htp、http、htttp等。

(2)ht+p:匹配字符“t”一次或多次,匹配结果可以是htp、http、htttp,但不可能是hp。

(3)ht{2}p:匹配字符“t”2次,匹配结果为http。

(4)ht{2,4}p:匹配字符“t”2~4次,匹配结果可以是http、htttp与httttp。

8.子组

在正则表达式中,使用使用“()”可以对一组字符串中的某些字符进行分组,示例如下:

(1)Jan(uary)? :匹配子组“uary”0次或1次,匹配结果可以是Jan或January。

(2) Feb(ruary)?:匹配子组“ruary”0次或1次,匹配结果可以是Feb或February。

点击此处
隐藏目录