正则表达式是利用字母或字符来描述和匹配具有某种规则的字符串。正则表达式最初发展是对人类神经网络的研究,其目的是用数学的方式来描述神经网络。后来被广泛应用于对字符串的匹配和处理。
很多计算机语言、Unix都采用正则表达式用于处理文本编辑和搜索。特别要注意的是,不同的计算机语言采用了不同的正则表达式解析引擎,不同的引擎工作机制和内部细节可能是不一样的。有可能出现同一个正则表达式,在不同的解释器下会出现不同的结果。
声明
默认情况下做如下约定:
1. 不同的正则表达式解释器对正则表达的解释和执行结果不同,本文例子并不代表所有正则表达式解释器均能执行。
2. 除非有特殊说明,解释器模式均按NFA模式处理。关于DFA,本文不涉及。
3. 文中,双引号为字符串“”标识符,间隔符``为正则表达式的标识符。
简介
正则表达式主要就是用来描述和检索字符用的。
例如,在句子“Jack is a boy”中找到字母“J”,可以直接用正则表达式:
`J`
在正则表达式中,除了可以直接用字母来查找所需要的字母。还可以用字符串来查找字符串。如果要在上述句子中搜索单词“boy”,可以直接用正则表达式:
`boy`
类似于这种直接用字母或字符串查找字符串的方式,是正则表达式最基础的应用。
在实际使用过程中,我们可能不一定明确知道所需要搜索的单词。比如,在句子“Jack is 10 years old”中,查找其中的数字。可以用正则表达式:
`[123456789][0123456789]`
表达式中,`[123456789]`为字符集,表示可能是数字1、2、3、4、5、6、7、8、9中的一个。正则表达式的意思为一个由1到9和0到9两个字符组成的两位数,也就是 "10" 到 "99"。考虑不会出现“00”到“09”这种组合方式,所以数字第一位不包括"0"字符。
字符集是常用的正则表达式类型之一,可以用元字符`-`来简化使用。如,上个表达式简写成:
`[1-9][0-9]`
表达式中,`[1-9]`代表的就是`[123456789]`。
上述表达式还有一个问题,假如我们的要查找的数字不是两位数,可能是一个多位数。那可以将表达改成:
`[1-9][0-9]+`
表达式分成了两个部分,`[1-9]`仍然表示“1到9”其中的一个字符。`[0-9]+`中,重复限定符`+`在正则表达中表示前面的子表达式出现一次或多次。`[0-9]+`表示一个或多个数字组成的字符串。两个部分组合在一起可以表示一个两位数以上的数字字符串。也就是说,上述表达式可以匹配字符串:“12”、“123”、“123456789”等字符串。
对于这种常见字符集,正则表达式还有一些常见的缩写方式,如:
`\d`
直接用`\d`这个元字符代表一个数字。等同于字符集`[0-9]`。其中,`\`为转义字符,转义字符和普通字符能组成不同的含义。所以,上述表达式还可以简单写成:
`[1-9]\d+`
更多的正则表达式使用方法在后续中逐步介绍。
登录 | 立即注册