字符转义

2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule

语法概览 2008-10-10 13:25:24 阅读3 评论0 字号:

2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule
  正则表达式定义了一些特殊的元字符,如^、$、.等。由于这些字符在正则表达式中被解释成其他的指定的意义,如果需要匹配这些字符,则需要使用字符转义来解决这一个问题。转义字符为“/”(反斜杠),它可以取消这些字符(如^、$、.等)在表达式中的具有的特殊意义。以下正则表达式匹配字符“.”。
/.                                                                         (30)
  以下正则表达式匹配字符“*”。
/*                                                                         (31)
  以下正则表达式匹配字符“/”。
//                                                                         (32)
  以下正则表达式匹配字符串“www.myweburl.com”。
www/.myweburl/.com                                                        (33)
  正则表达式的常用转义字符的说明如表2-3所示。其中,除了.、$、^、{、[、(、|、)、*、+、?、/之外的字符不需要进行转义,它们都表示字符本身。
表2-3常用字符转义
字符或表达式
说明
/a
响铃(警报)/u0007。
/b
在正则表达式中,表示单词的边界;如果在字符类中,则表示退格符/u0008。
/t
制表符符/u0009。
/r
回车符/u000D。
/v
垂直制表符/u000B。
/f
换页符/u000C。
/n
换行符/u000A。
/e
回退(Esc)符/u001B。
/040
将ASCII字符匹配为八进制数(最多三位)。
/x20
使用十六进制表示形式与ASCII字符匹配。
/cC
ASCII控制字符,如Ctrl-C。
/u0020
使用十六进制表示形式(恰好四位)与Unicode字符匹配。
注意:正则表达式中的元字符在字符类中不做任何特殊处理,它仅仅表示一个自身的字符。如正则表达式[-.]只能匹配字符“-”和“.”,它不能匹配除字符“-”和“.”之外的字符。因此,在字符类中使用元字符时,不需要使用转义操作。
  在正则表达式中,常用的字符类如表2-2所示。
表2-2常用的字符类
字符或表达式
说明
.
匹配除换行符号之外的任意字符。
/w
匹配单词字符(包括字母、数字、下划线和汉字)。
/W
匹配任意的非单词字符(包括字母、数字、下划线和汉字)。
/s
匹配任意的空白字符,如空格、制表符、换行符、中文全角空格等。
/S
匹配任意的非空白字符。
/d
匹配任意的数字。
/D
匹配任意的非数字字符。
[aeiou]
匹配字符集合中的任何字符。
[^aeiou]
匹配除字符集合中的之外的字符。
[0-9a-zA-Z_]
匹配任何数字、字母(大写字母和小写字母)和下划线,等同于/w
[^0-9a-zA-Z_]
匹配除任何数字、字母、下划线之外的任何字符,等同于/W。
/p{name}
匹配{name}指定的命名字符类中的任何字符。
/P{name}
匹配除{name}指定的命名字符类中之外的任何字符。
注意:在表2-2中,表达式/p{name}和/P{name}为.NET Framework所支持。
  在正则表达式中,元字符通常一次只能匹配一个位置或字符集合中的一个字符。通常情况下,如果要匹配数字、字母、空白等字符时,可以直接使用与这些集合相对应的元字符。然而,如果要匹配的字符集合(如集合[0,1,2,3,4,5])没有与之相对应的元字符时,则需要自定义匹配的字符集合。此时,可以使用字符类解决这个一个问题。字符类是一个字符集合,如果该字符集合中的任何一个字符被匹配,则它就会找到该匹配项。
  字符类是正则表达式中的“迷你”语言,可以在方括号“[]”中定义。最简单的字符类是方括号“[]”和一个字母表表构成,如元音字符类[aeiou]。以下正则表达式匹配数字0、1、2、3、4、5、6中的任何一个。
[0123456]                                                                   (20)
  以下正则表达式可以匹配任何数字(即0、1、2、3、4、5、6、7、8、9)。
[0123456789]                                                                       (21)
  以下正则表达式匹配HTML标记中的“<H1>”、“<H2>”、“<H3>”、“<H4>”、“<H5>”或“<H6>”。
<H[123456]>                                                              (22)
  以下正则表达式匹配字符串“Jack”或者“jack”。
[Jj]ack                                                                       (23)
  然而,正则表达式[0123456789]的书写非常不方便。因此,正则表达式引入了连接符“-”定义字符的范围。以下正则表达式等价于正则表达式[0123456789]。
[0-9]                                                                        (24)
  以下正则表达式可以匹配任何小写字母。
[a-z]                                                                         (25)
  以下正则表达式可以匹配任何大写字母。
[A-Z]                                                                                (26)
注意:当且仅当在字符类中的连接符“-”不是第一个字符时,它才具有特殊的含义:它可以指定字符类的最大边界和最小边界之间的任何字符。它的具体含义由具体的字符类决定。因此,字符类的最大边界和最小边界,以及字符在ASCII或Unicode表中出现的顺序共同确定了连接符“-”指定的字符的范围。
如果要在字符类中包括连接符“-”,则必须将它作为第一个字符。如正则表达式[-a]匹配字符“-”或者“a”。
  在字符类中,若字符“^”是字符类的第一个字符,则表示否定该字符类,即匹配除了该字符类之外的任意字符。以下正则表达式可以匹配任何非元音字符。
[^aAeEiIoOuU]                                                                       (27)
  以下正则表达式可以匹配除连接符“-”之外的任何字符。
[^-]                                                                          (28)
  以下正则表达式匹配字符a之后不是字符串b的字符串。
a[^b]                                                                      (29)
  使用工具Regex Tester测试正则表达式(29),结果如图所示。
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
元字符/s能够匹配的空白字符,如空格、制表符、换行符、中文全角空格等。以下正则表达式首先匹配一个单词字符,然后匹配一个空白字符,最后匹配一个单词字符。
/w/s/w                                                                    (15)
  元字符/S能够匹配的非空白字符,即除空格、制表符、换行符、中文全角空格等字符之外的字符。以下正则表达式首先匹配一个非空白字符,然后匹配一个空白字符,最后匹配一个非空白字符。
/S/s/S                                                                     (16)
  使用工具Regex Tester分别测试正则表达式(15)和(16),结果分别如图。/S和/w都能够匹配单词字符,但是,/S能够匹配除了单词字符之外的字符,如字符“/”、“*”等。
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客         
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
  元字符/d能够匹配0~9中的任何数字。以下正则表达式匹配1位的整数(即小于10的整数)。
/d                                                                        (17)
  以下正则表达式匹配3位的整数(即大于999小于1000的整数)。
/d/d/d                                                                       (18)
  元字符/D能够匹配除0~9之外的任何字符。以下正则表达式匹配以数字开头的、非数字字符结尾的字符串,且数字字符是该字符串的第一个字母。
/b/d/D                                                                       (19)
  使用工具Regex Tester分别测试正则表达式/d/d/d和/b/d/D,结果分别如图所示。
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
   
 
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
正则表达式的常用元字符(^、$、/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都匹配字符“*”。
              
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
  匹配字符的元字符包括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”的方式如图所示。
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
  以下正则表达式匹配以字母“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_”的方式如图2.2所示。
  
  2.3 字符转义-2.1 元字符 -正则表达式学习笔记 -grule - hxzon - hxzon的博客
匹配位置的元字符包括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等效,即都匹配单词的边界这两个位置(开始位置和结束位置)。
在正则表达式中,元字符(Metacharacter)是一类非常特殊的字符,它能够匹配一个位置或字符集合中的一个字符,如.、/w等。根据功能,元字符可以分为两种类型:匹配位置的元字符和匹配字符的元字符。
本章节主要介绍正则表达式的基础理论,这些理论将为编写正则表达式提供法则和规范。正则表达式主要包括以下基础理论。
      元字符;
      字符类;
      字符转义;
      反义;
      限定符;
      替换;
      分组;
      反向引用;
      零宽度断言;
      负向零宽度断言;
      匹配选项;
      注释;
      优先级顺序;
      递规匹配。
注意:对于不同的编程语言而言,正则表达式的基础理论可能存在一些差别。譬如,一些编程语言(如PHP)使用字符/<、/>分别匹配单词的开始和结束位置;一些编程语言(如C#)使用字符/b匹配单词的开始和结束位置。如果本书未做特殊说明,那么书中所采用的正则表达式基础理论是与.NET Framework兼容的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值