1. 匹配位置的元字符
匹配位置的元字符包括3个字符:^、$和/b。其中,^(脱字符号,通常在文章中插入字时使用)和$(美元符号)都匹配一个位置,它们分别匹配行的开始和结尾。以下正则表达式匹配以“String”开头的行,即被匹配的行的第一个字符串为“String”。
^String (1)
以下正则表达式匹配以“ String ”结尾的行,即被匹配的行的最后一个字符串为“ String ”。
String$ (2)
以下正则表达式匹配以“ String ”开始和结尾的行,即被匹配的行的第一个字符串和最后一个字符串都为“ String ”。实际上,该行只包含字符串“ String ”。
^String$ (3)
以下正则表达式匹配一个空行,该行中不包含任何字符串。
^$ (4)
以下正则表达式匹配任意行。该表达式只匹配行中的开始位置,因为任意行都包括其开始位置,所以该表达式将匹配任意行。
^ (5)
元字符/b和^、$具有相似性,它也是匹配一个位置。/b可以匹配单词的开始或结尾,即单词的分界处。通常情况下,英文单词往往由空格符号或标点符号或换行符号来分隔,但是元字符/b不匹配空格符号、标点符号和换行符号中的任何一个,它仅仅匹配一个位置。以下正则表达式匹配以“Str”开头的字符串,如“String”、“String Format”等。
/bStr (6)
正则表达式/bStr匹配的字符串必须“Str”开头,且“Str”之前是单词的分界处。正则表达式/bStr不能描述或限定“Str”之后的字符串的形式。以下正则表达式匹配以“ing”结尾的字符串,如“String”、“This is a String”等。
ing/b (7)
正则表达式ing/b匹配的字符串必须“ing”结尾,且“ing”之后是单词的分界处。以下正则表达式匹配一个完整的单词“String”。
/bString/b (8)
注意:在某些特定环境或语言下,还可以分别采用/<和/>来匹配单词的开始和结束位置。它们在效果上和元字符/b等效,即都匹配单词的边界这两个位置(开始位置和结束位置)。
2. 匹配字符的元字符
匹配字符的元字符包括7个字符:.(点号)、/w、/W、/s、/S、/d和/D。其中,.(点号)匹配除换行符号之外的任意字符;/w匹配单词字符(包括字母、数字、下划线和汉字);/W匹配任意的非单词字符;/s匹配任意的空白字符,如空格、制表符、换行符、中文全角空格等;/S匹配任意的非空白字符;/d匹配任意的数字;/D匹配任意的非数字字符。以下正则表达式匹配一个非空行,该行中可以包含除换行符号之外的任意字符。
^.$ (9)
以下正则表达式匹配一个非空行,且该行中只能包含字母、数字、下划线和汉字中的任意字符。
^/w$ (10)
以下正则表达式匹配以字母“a”开头的长度等于8的任意单词。
/ba/w/w/w/w/w/w/w/b (11)
正则表达式/ba/w/w/w/w/w/w/w/b匹配单词“anterior”的方式如下图所示。
以下正则表达式匹配以字母“a”开头的、后跟随形如“3个字符”+“3个数字”+“1个非数字字符”的、长度等于8的任意单词。
/ba/w/w/w/d/d/d/D/b (12)
正则表达式/ba/w/w/w/d/d/d/D/b匹配单词“ante123_”的方式如下图所示。
3. 总结:
正则表达式的常用元字符(^、$、/b、.、/w、/W、/s、/S、/d和/D),它们功能的描述说明如表2-1所示。
表2-1 常用元字符
字符 |
说明 |
^ |
匹配行的开始位置。 |
$ |
匹配行的结束位置。 |
/b |
匹配单词的开始或结束位置。 |
. |
匹配除换行符号之外的任意字符。 |
/w |
匹配单词字符(包括字母、数字、下划线和汉字)。 |
/W |
匹配任意的非单词字符(包括字母、数字、下划线和汉字)。 |
/s |
匹配任意的空白字符,如空格、制表符、换行符、中文全角空格等。 |
/S |
匹配任意的非空白字符。 |
/d |
匹配任意的数字。 |
/D |
匹配任意的非数字字符。 |
元字符.能够匹配除换行符号之外的任意字符,如大写字母、小写字母、数字、_(下划线)等。以下正则表达式匹配以除换行符号之外的任何字符分割字符串“2007”、“06”、“22”的字符串。
2007.06.22 (13)
元字符 /W 能够匹配除单词字符之外的任意字符。以下正则表达式匹配长度为 2 的字符串,且该字符串不包括单词字符。
/W/W (14)
使用工具Regex Tester测试正则表达式2007.06.22,结果如图2.3所示。使用工具Regex Tester测试正则表达式/W/W,结果如图2.4所示。在图2.4的结果中,匹配了3个结果:“?”、“*”和“**”。在第一个结果中,正则表达式/W/W中的第一个/W匹配字符“?”的上一行的换行符号,第二个/W才匹配字符“?”。在第三个结果中,正则表达式/W/W中的每一个/W都匹配字符“*”。
元字符/s能够匹配的空白字符,如空格、制表符、换行符、中文全角空格等。以下正则表达式首先匹配一个单词字符,然后匹配一个空白字符,最后匹配一个单词字符。
/w/s/w (15)
元字符/S能够匹配的非空白字符,即除空格、制表符、换行符、中文全角空格等字符之外的字符。以下正则表达式首先匹配一个非空白字符,然后匹配一个空白字符,最后匹配一个非空白字符。
/S/s/S (16)
使用工具Regex Tester分别测试正则表达式(15)和(16),结果分别如图。/S和/w都能够匹配单词字符,但是,/S能够匹配除了单词字符之外的字符,如字符“/”、“*”等。
元字符/d能够匹配0~9中的任何数字。以下正则表达式匹配1位的整数(即小于10的整数)。
/d (17)
以下正则表达式匹配3位的整数(即大于99小于1000的整数)。
/d/d/d (18)
元字符/D能够匹配除0~9之外的任何字符。以下正则表达式匹配以数字开头的、非数字字符结尾的字符串,且数字字符是该字符串的第一个字母。
/b/d/D (19)
使用工具 Regex Tester 分别测试正则表达式 /d/d/d 和 /b/d/D ,结果分别如图 所示。