学术能力的缺乏并不意味着你就擅长混社会,说不定还不如在学校的表现

发掘积累过程的快感

首页 » BIBLE模型 » 编程基础 » 第三节:正则表达式元字符(一)

第三节:正则表达式元字符(一)


上一节了解正则表达式的结构中我们初步了解了元字符,现在我们开始正式学习元字符,我会用几个例子来介绍它们。

行的起始和结束

首先要理解的是元字符就是脱字符号 ^ 和美元符号 $,在检查一行文本时,^ 代表一行的开始,$ 代表结束。

来看个小实例,如果需要统计一篇关于宠物文章里面 dog 出现的次数,要如何写这个正则呢?

/dog/,这样对不对?但是如果要统计每一段最开头的 dog 呢?应该这样 /^dog/,是不是啊?如果要统计最后的就应该这样了 /dog$/

在这个正则中 /^dog/ 中,我们第一反应就是以 dog 开头的本文,但实际上我们应该这样理解,以字母 d 开头接下来是 og 的文本。这两种理解方式结果并没有差异,但按照字符来解读更容易理解正则表达式中的逻辑。

字符组

匹配若干字符之一

继续,什么叫匹配若干字符之一。如果我要搜索一个单词 helay,但是我不确定它是否写作,就可以使用 正则表达式结构体 (construct)/[……]/。它允许使用者列出这个地方期望匹配的字符,通常被称作 字符组 (character class)。/[e]/ 匹配字符 e,/[a]/ 匹配字符 a,/[ea]/ 能匹配字符 e 或者 a。所以在上面的情景中,可以写这样的正则 /h[ea]lay/

注意,正则表达式默认是区分大小写的,/helay/ 是不能匹配到 Helay 的,现阶段,如果我们要匹配 Helay 怎么办呢?有了字符组,可以这样写,/[hH]elay/

在字符组内部,可以列举任意多个字符。例如我们要匹配 HTML TAG 标签中的 H 标签,/\/,这个正则可以用来匹配这个正则可以用来匹配 <H1><H2><h3> 等。

在字符组内部, 字符组元字符 "-"(连字符)表示一个范围:/H[1-6]//H[123456]/ 是完全一样的。/[0-9]//[a-z]/ 是常用的匹配数字和小写字母的简便方式。同时多重范围也是允许的。例如 /[012345abcdefABCDEF]/ 完全可以写成 /[0-5a-fA-F]/(或者写成 /[a-f0-5A-F]/,顺序无所谓)。

注意了啊!只有在字符组内部,连字符号才是元字符,否则它就是普通的连字符号。其实连字符号在字符组内部也不一定是元字符。如果连字符号出现在了字符组的开头,它表示就是一个普通的字符,而不是一个范围。同样的道理,问号和点号通常被当作元字符处理,但是在字符组中则不是如此(示例:/[0-9A-Z_!.?]/,这个正则中,真正的特殊字符就只有那两个连字符)。

排除型字符组

/[^……]/ 取代 /[……]/,这个字符组就会匹配任何未列出的字符。例如:[^1-6] 匹配除了 1 到 6 的任何字符。这个字符组开头的 ^ 表示“排除”,所以这里列出了不希望匹配的字符。

注意了啊!排除型字符组表示“匹配一个为列出的字符”,而不是“不要匹配列出的字符”。这两种说法看起来一样,但是有细微的差异。有一种简单的理解排除型字符组的方法,就是把它们看作普通的字符组,里面包含的是除了“排除型字符组中所有字符”以外的字符。

互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼。 “Bible”是圣经,有权威的书,我们的本意就是为开发者提供真正有用的的资料。 我的电子邮件 1217179982@qq.com,您在开发过程中遇到任何问题,欢迎与我联系。
Copyright © 2024. All rights reserved. 本站由 Helay 纯手工打造. 蜀ICP备15017444号