本章节将讨论构造简单正则表达式的一些基本内容,讨论这些简单正则表达式是为了巩固前面介绍的正则表达式工具的使用,逐渐熟悉基本的正则表达式用法,从而为掌握更加复杂的正则表达式打下基础。
最简单的正则表达式包括匹配单个字符。如果要匹配一个特定的字母字符或者数字,那么只需使用由相应字符和数字组成的模式即可。
例如:如果要匹配大写字母 A,应该使用下面的模式:
A
上面模式将匹配任何大写的A。如下图:
上面的正则表达式模式 A 存在匹配项时,我们利用的是正则表达式引擎默认的模式,也就是说不会指出字符出现的次数。在这种情况下,正则表达式引擎假设模式中的字符恰好出现一次。除非在正则表达式模式中设定了一个限定符来指定次数。例如:
AA
原理:模式 AA 告诉正则表达式引擎应匹配大写字符 A,如果第1个字符匹配成功,那么尝试匹配下一个字符。如果第2个字符也是A,那么表示全部匹配成功。如果在匹配第1个字符时失败了,会测试下一个字符是不是A字符。如果不是 A 字符,匹配失败。然后,重新根据正则表达式模式中的第1个A来开始下一轮匹配。
要匹配三个字符,可以简单地在模式的同一行中重复输入该字符3次。例如:匹配三个 A 字符,如下:
AAA
如果要匹配像 ABC123 这样的产品编号,可以使用下面的模式:
AAA\d\d\d
其中每一个 \d 表示一个元字符,该元字符表示数字 0~9(包含 0 和 9)。它不表示反斜杠后跟一个小写字母 d。
\d 元字符的含义与我们到目前为止在模式中用到的直接量字符的含义明显不同。字符 A 在模式中只能匹配大写的 A字符,而元字符 \d 却可以匹配任何数字:0、1、2、3、4、5、6、7、8、9。
一个元字符通常会匹配一类字符。上面元字符 \d 匹配的就是数字的字符类。
当你看到模式 \d\d\d 时,它匹配 3 个连续的数字,例如:012、223、234、334、999等
原理:正则表达式引擎会根据模式查找一个数字。如果它测试的第一个字符不是一个数字,会在被测试字符串中向前移动一个字符并测试该字符是否是一个数字。如果不是,则会继续上面的步骤。
如果找到了与模式中第1个 \d 匹配的项,正则表达式引擎会测试下一个字符是否也是一个数字。如果第2个 \d 也匹配,那么会继续测试下一个字符。如果3个连续的字符都是数字,那么正则表达式模式 \d\d\d 就取得了一个匹配项。
上面介绍了怎样匹配单个字符、连续字符和元字符 \d 的用法。现实中,不可能简单的匹配重复连续相同的字符,可能需要匹配不同的字符序列。例如,匹配产品号中以 DAC 开头的产品号,产品号如下:
ACD012 ACD342 ACD122 DAC987 DAC667 ABE678
正则表达式模式,如下:
DAC\d\d\d
上面正则表达式模式将查找大写 D 的匹配项。如果找到该匹配项,检查下一个字符是否与大写的 A 匹配。如果匹配,接着检查是否后面的字符匹配大写的 C。如果这 3 个匹配项都存在,检查后面的 3 个字符是否是连续的 3 个数字。
上面模式将匹配如下字符串:
DAC987 DAC667