在正式学习正则表达式之前,我们先来了解下操作系统中的文件操作。我们都知道,sitemap.xml(这是一个网站地图文件,如果有兴趣,可以使用 https://www.helay.net/products/sitemap 生成你自己网站地图) 是一个文件名,但如果你用过 Unix 或者 DOS/Windows 的话,就会知道 *.xml
能够用来选择多个文件。在此类文件名(称为“文件群组” file globs 或者“通配符” wildcards)中,有些字符具有特殊的意义。星号表示“任意文本”,问号表示“任意单个字符”。所以文件群组 *.xml
以能够匹配字符 *
符号开头,以普通文字 .xml
结尾,所以,它的意思是:选择以任意文本开头,以.xml 结尾的所有文件。
大多数系统都提供了少量的附加特殊字符,但总的来说这些文件名模式(filename pattrens)的能力还很有限。不过这些只涉及到文件名,所以已经够用了。 不过,处理文本就没有这么简单了,所以一种“通用的模式语言”(generalized pattren language)已经发展起来,功能强大,描述能力很强,可以用来解决各种问题,它就是“正则表达式”(regular expression)。
完整的正则表达式由两种字符构成。特殊字符(例如文件名例子中的*)称为“元字符”(metacharacters),其他为“文字”(literal),或者是普通文本字符。 为了便于理解,我们可以把正则表达式想象为普通语言,普通字符对应普通语言中的单词,而元字符对应则是语法。根据语言的规则,按照语法把单词组合起来,就会得到能传达思想的文本。
有这样一个时候,我需要统计邮件中所有的来信,因为有很多重复的,如果要一个一个统计,这将是一件非常可怕的事。于是我用这样一个正则来处理 /^(from|subject):/i
,可以获取到所有以 from:
或者 subject:
开头(不区分大小写)的文本。