4.2 子模式
多数情况下,提到正则表达式中的子模式(subpattern),就是指分组中的一个或多个分组。子模式就是模式中的模式。多数情况下,子模式中的条件能得到匹配的前提是前面的模式得到匹配,但也有例外。子模式的写法可以有很多种,这里我们主要关注括号中的子模式。
从某种意义上说,你之前所见的模式:
(the|The|THE)
有三个子模式:the是第一个子模式,The是第二个,而THE是第三个。但是这种情况下,匹配第二个子模式不依赖于是否匹配第一个。(最左边的模式会首先匹配。)
而在以下的模式中,子模式依赖于前面的模式:
(t|T)h(e|eir)
通俗地讲,这个模式会匹配字面值t或T,然后是一个h,接下来就是一个e或者是eir。相应地,这个模式会匹配以下所有情况:
· the;
· The;
· their;
· Their。
在以上情况中,第二个子模式(e|eir)依赖于第一个子模式(tT)。
括号对于子模式不是必需的。下面是一个使用字符组的子模式示例:
\b[tT]h[ceinry]*\b
这个模式会匹配the或The还有thee、thy以及thence等单词。两个单词边界(\b)表示该模式只匹配整个单词,而不会匹配单词中的某几个字母。
以下是对这个模式的解析。
· \b匹配单词起始边界。
· [tT]是字符组,它匹配小写字母t或者大写字母T。可以将其看做是第一个子模式。
· 然后匹配(或尝试匹配)小写字母h。
· 第二个也就是最后一个子模式也表示为字符组[ceinry],其后用量词*表示零个或多个。
o 最后,该模式以另外一个\b结束。
正则表达式的术语经常是含义相近但使用范围迥异。为了在本书中解释子模式和其他概念,我查阅了很多资料并试着将它们的表述统一起来。但肯定会有人争辩说字符组不是子模式。我的观点是它们与子模式起到的作用一样,所以两者可以归为一类。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论