正则表达式可选元素
现在来看 color 和 colour 的例子,这两个单词只有“u”的差别,到这一章节,我们可以使用元字符 ?
,所以匹配这一实力的正则表达式是: /colou?r/
。元字符 ?
代表可选项。把它加在字符后面就表示此处容许出现这个字符,不过它的出现不作为匹配成功的必要条件。
优雅的正则表达式
何为优雅的正则,请看这个例子。我需要匹配表示 7 月 4 日(July fourth)的文本,其中月份可能写作“July”或是“Jul”,而日期可能写作“fourth”、"4th"或是"4"。 如果不了解正则表达式的可选元素,我们可能是这样写的正则表达式 /(july|jul)\s(fourth|4th|4)/
。
现在,看我做一些小的变化:
- 首先,把
/(july|jul)/
缩短为/july?/
,这样的变化是等价的。现在做这个变化,括号也可以省略了,我们将得到这样的正则表达式/july?\s(fourth|4th|4)/
。 - 现在来看第二部分,把
/4th|4/
简化为/4(th)?/
,这个时候元字符“?”的作用元素则是整个括号范围。括号内的表达式可以 任意复杂,但从括号外看就是一个整体。界定”?“的作用对象是括号的主要用途之一。 - 现在我们的表达式成了这样
/july?\s(fourth|4(th)?)/
,尽管包含了许多元字符,而且还有嵌套,但理解并不困难。
正则表达式-量词
在正则表达式中,有需要匹配固定次数的时候,需要量词。”+“(加号)和”*“(星号)的作用类似于问号。
元字符”+“表示”之前紧邻的元素出现一次或多次“;
元字符”“表示之前紧邻的元素出现任意多次,或者不出现。换一种说法就是,”“匹配尽可能多的次数,如果实在无法匹配也是可以的。
问号、加号、星号这 3 个元字符,统称为 量词 ,它限定了所有元素的重复次数。
规定重复次数的范围:区间
某些版本的 egrep 能够使用元字符序列来定义重现次数的区间:/.{min,max}/
。这称为” 区间量词 “。 例如:/.{3,5}/
能匹配 3 到 5 个任意字符。