一、前序
前一篇我们说到了正则表达式的4大模板组成部分中的定界符和原子,下面我们继续昨天的茬,探讨下接下来的元字符和修正符。
二、元字符
下面分为几类进行说明:
(1)限定符:在正则表达式中,若要限制给定原子的出现的次数,则应该使用限定符。
限定符主要有"*"、“+”、“?”、“{n}”、“{n,}”、“{n,m}”共六种。
其中"*"、"+"、"{n,}"三个被称为贪婪限定符,也就是说这三位会经可能多的匹配能匹配的文字。"?"表示最多匹配1次,“{n}”表示前一个原子必须出现n次,"{n,m}"表示前一个原子至少出现n次或者最多出现m次。
示例:
'/ab{2,3}c/' 可以匹配abc、abbc
(2)边界限制:限制字符串的边界范围,使得结果更准确。
边界限制符主要有四种:"^(等同于\A)"、"$(等同于\Z)"、“\b”、“\B”
"^(等同于\A)":限定开始字符串
"$(等同于\Z)":限定结束字符串
"\b":限定字符串种单词前或后必须有边界,即有空格等
"\B":与""\b恰好相反,即前或后必须没有边界
示例:
'/^ksk|ksk$/' 以ksk开始的字符串或者以ksk结束的字符串
'/\bks\B/' ksk为匹配字符串
(3)句号(.)的限定
句号可以包含任何一个字符,但注意不包括换行符。
如果句号只是像上面所说的那样匹配一个字符,那使用率有限,我们可以和其他限定符配合使用,如".*?"或者".+?"表示任何字符串(除了换行符)
示例:'/a.*?b/'
(4)模式选择符(|)
"|"表示或的含义,即匹配任意一组即可
示例:‘/aa|bb|cc/’
(5)模式单元
模式单元是使用元字符"()"讲多个原子组成一个大的原子,然后被当成为一个单元使用。
模式单元的优先级较高。
示例:
'/(dd)*ksk/' 匹配ddksk、ddddksk etc.
(6)后向引用
后向引用者,即使用"\1"、”\2“....等形式,分别代表第一个模式单元、第二个模式单元等以此类推所对应的内容
示例:'/(dd)(ksk)\\1KQ\\2KHY/' 匹配ddkskddKQkskKHY
注意:模式单元会被存储到对应的缓冲区中,然后通过"\1"、"\2"等进行匹配。
三、修正符
修正符是出现在最后一个"/"之后,其中常用的修正符有:"i"、"m"、”s“、”x“、”c“、”U“等
示例:
'/aa/i' 匹配aa、Aa、AA、aA (i为ignore的意思,即忽略大小写的意思)
'/dd ksk/ix' 匹配ddksk ddKSK等 (即忽略大小写和空格)