自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 收藏
  • 关注

原创 第1章 正则表达式概述

正则表达式在程序设计语言中存在着广泛的应用,特别是用来处理字符串。如匹配字符串、查找字符串、替换字符串等。可以说,正则表达式是一段文本或一个公式,它是用来描述用某种模式去匹配一类字符串的公式,并且该公式具有一定的模式。本小节将介绍正则表达式的基本概念、第一个正则表达式,以及测试正则表达式的工具Code Architects Regex Tester。 

2008-03-24 15:35:00 4140

原创 1.1 什么是正则表达式

  正则表达式(Regular Expression)起源于人类神经系统的早期研究。神经生理学家Warren McCulloch和Walter Pitts研究出一种使用数学方式描述神经网络的方法。1956年,数学家Stephen Kleene发表了一篇标题为“神经网事件的表示法”的论文,并在该论文中引入了“正则表达式”这一个概念。该论文称正则表达式是:“正则集的代数”的表达式。因此,采用“正则表达

2008-03-24 15:34:00 5174 2

原创 1.2 第一个正则表达式

  很多人认为正则表达式是晦涩难懂的,书写正则表达式是一件很费力气的事情,其实不然。大多数正则表达式是很简单的,除了少数几个很难理解的概念(如后向引用、分组、断言等,这些将在后面章节进行详细介绍)之外。可以说,最简单的正则表达式是由一个字符组成的表达式。以下表达式都是正则表达式。a                                                       

2008-03-24 15:33:00 4318 2

原创 1.3 测试工具

  创建一个正则表达式之后,需要测试该正则表达式是否正确。本书中使用正则表达式测试工具“Code Architects Regex Tester”来测试正则表达式。这是一个专门用来测试正则表达式的工具,它的初始界面如图1.1所示。此时,该工具包含4个区域:Regex、Replace、Source和Matches。其中,Regex区域用来书写正则表达式;Replace区域书写用于替换相关的表达式;S

2008-03-24 15:31:00 3383

原创 第2章 正则表达式基础理论

本章节主要介绍正则表达式的基础理论,这些理论将为编写正则表达式提供法则和规范。正则表达式主要包括以下基础理论。      元字符;      字符类;      字符转义;      反义;      限定符;      替换;      分组;      反向引用;      零宽度断言;      负向零宽度断言;      匹配选项;     

2008-03-24 15:28:00 3880

原创 2.1 元字符

在正则表达式中,元字符(Metacharacter)是一类非常特殊的字符,它能够匹配一个位置或字符集合中的一个字符,如.、/w等。根据功能,元字符可以分为两种类型:匹配位置的元字符和匹配字符的元字符。 

2008-03-24 15:26:00 3467

原创 2.1.1 匹配位置的元字符

匹配位置的元字符包括3个字符:^、$和/b。其中,^(脱字符号,通常在文章中插入字时使用)和$(美元符号)都匹配一个位置,它们分别匹配行的开始和结尾。以下正则表达式匹配以“String”开头的行,即被匹配的行的第一个字符串为“String”。^String                                                                      

2008-03-24 15:25:00 5333 3

原创 2.1.2 匹配字符的元字符

  匹配字符的元字符包括7个字符:.(点号)、/w、/W、/s、/S、/d和/D。其中,.(点号)匹配除换行符号之外的任意字符;/w匹配单词字符(包括字母、数字、下划线和汉字);/W匹配任意的非单词字符;/s匹配任意的空白字符,如空格、制表符、换行符、中文全角空格等;/S匹配任意的非空白字符;/d匹配任意的数字;/D匹配任意的非数字字符。以下正则表达式匹配一个非空行,该行中可以包含除换行符号之外的

2008-03-24 15:23:00 3651 4

原创 2.1.3 元字符总结(1)

 正则表达式的常用元字符(^、$、/b、.、/w、/W、/s、/S、/d和/D),它们功能的描述说明如表2-1所示。表2-1 常用元字符 字符 说明

2008-03-24 15:22:00 2809

原创 2.1.3 元字符总结(2)

元字符/s能够匹配的空白字符,如空格、制表符、换行符、中文全角空格等。以下正则表达式首先匹配一个单词字符,然后匹配一个空白字符,最后匹配一个单词字符。/w/s/w                                                                    (15)  元字符/S能够匹配的非空白字符,即除空格、制表符、换行符、中文全角空格等字符之外的

2008-03-24 15:20:00 2830 2

原创 2.2 字符类(1)

  在正则表达式中,元字符通常一次只能匹配一个位置或字符集合中的一个字符。通常情况下,如果要匹配数字、字母、空白等字符时,可以直接使用与这些集合相对应的元字符。然而,如果要匹配的字符集合(如集合[0,1,2,3,4,5])没有与之相对应的元字符时,则需要自定义匹配的字符集合。此时,可以使用字符类解决这个一个问题。字符类是一个字符集合,如果该字符集合中的任何一个字符被匹配,则它就会找到该匹配项。

2008-03-24 15:13:00 2388

原创 2.2 字符类 (2)

注意:正则表达式中的元字符在字符类中不做任何特殊处理,它仅仅表示一个自身的字符。如正则表达式[-.]只能匹配字符“-”和“.”,它不能匹配除字符“-”和“.”之外的字符。因此,在字符类中使用元字符时,不需要使用转义操作。  在正则表达式中,常用的字符类如表2-2所示。表2-2 常用的字符类 字符或

2008-03-24 15:11:00 2082

原创 2.3 字符转义

  正则表达式定义了一些特殊的元字符,如^、$、.等。由于这些字符在正则表达式中被解释成其他的指定的意义,如果需要匹配这些字符,则需要使用字符转义来解决这一个问题。转义字符为“/”(反斜杠),它可以取消这些字符(如^、$、.等)在表达式中的具有的特殊意义。以下正则表达式匹配字符“.”。/.                                                     

2008-03-24 15:10:00 2180

原创 2.4 反义

  在使用正则表达式时,如果需要匹配不在字符类指定范围内的字符时,可以使用反义规则。以下正则表达式匹配字符a之后不是字符串b的字符串。a[^b]                                                                       (34)  以下正则表达式匹配被尖括号括起来的、以字符串“asp”开头的、倒数第二个字符不能为字符“>”的

2008-03-24 15:08:00 3597

原创 2.5 限定符(1)

  正则表达式的元字符一次一般只能匹配一个位置或一个字符,如果要匹配零个或一个或多个字符时,则需要使用限定符。限定符用于指定允许特定字符或字符集自身重复出现的次数。如{n}表示重复n次、{n,}表示重复至少n次、{n,m}表示重复至少n次,最多m次。常用限定符的说明如表2-5所示。表2-5 常用限定符

2008-03-24 15:07:00 2124

原创 2.5 限定符 (2)

  正则表达式/ba/w*/b匹配单词“anterior”的过程如图2.10所示,匹配的具体步骤如下:(1)匹配单词的开始位置;(2)在步骤①时匹配字符a;(3)匹配字符a之后,该表达式可以直接通过步骤②匹配到单词的结束位置,并完成整个匹配过程,从而匹配单词“a”;(4)该表达式在匹配字符a之后,可以通过步骤③来匹配任何单词字符;(5)重复步骤④一次或多次,即匹配一个或多个任何

2008-03-24 15:06:00 1625

原创 2.5 限定符(3)

  以下正则表达式能够匹配满足以下特征的单词:      字符串只包含字符a和b,且字符b必须在字符a之后;      字符a连续的个数最多为4,最小为1;      字符b连续的个数最多为3,最小为1。/ba{1,4}b{1,3}/b                                                               (47)  正则表

2008-03-24 15:04:00 1436

原创 2.5 限定符(4)

  如果在限定符*、+、?、{n}、{n,}和{n,m}之后再添加一个字符“?”,则表示尽可能少的重复字符“?”之前的限定符号的重复次数,这种方式匹配被称为懒惰匹配。与之相对应的是贪婪匹配,即仅仅使用单个限定符*、+、?、{n}、{n,}和{n,m}的匹配。常用的懒惰限定符如表2-6所示。表2-6 常用懒惰限定符

2008-03-24 15:02:00 1624

原创 2.5 限定符(5)

  以下正则表达式匹配以字母a开头的、以字母b结束的、长度为2或者3的字符串。此时,这是一种贪婪匹配。a.?b                                                                      (52)  以下正则表达式匹配以字母a开头的、以字母b结束的、长度为3的字符串。此时,这是一种懒惰匹配。a.??b            

2008-03-24 14:52:00 1620

原创 2.6 替换 (1)

  正则表达式0/d{2}-/d{8}和0/d{3}-/d{7}分别匹配区号为3位和4位的固定电话号码,如果需要同时匹配区号为3位和4位的固定电话号码时,使用替换可以满足这一个需求。最简单的替换使用字符“|”表示,它表示如果某一个字符串匹配了正则表达式中的字符“|”的左边或者右边的规则,那么该字符串也匹配了该正则表达式。  以下正则表达式匹配了当前国内部分地区的两种固定电话号码:一种是号码的前

2008-03-24 14:46:00 1613

原创 2.6 替换 (2)

  正则表达式[Jj]ack可以匹配字符串“Jack”或者“jack”。该正则表达式还可以使用替换来实现同样的匹配效果。如下正则表达式等效于正则表达式[Jj]ack。Jack|jack                                                                    (59)  如下正则表达式等效于正则表达式Jack|jack。因此,正则

2008-03-24 14:45:00 1299

原创 2.7 分组

  分组又称为子表达式,即把一个正则表达式的全部或部分分成一个或多个组。其中,分组使用的字符为“(”和“)”,即左圆括号和右圆括号。分组之后,可以将字符为“(”和“)”之中的表达式看成一个整体来处理。以下正则表达式可以匹配重复出现字符串“abc”一次或两次的字符串。此时,表达式将“abc”看成一个整体来进行重复匹配。(abc){1,2}                             

2008-03-24 14:40:00 1404

原创 2.8 后向引用

  当一个正则表达式被分组之后,每一个组将自动被赋予一个组号,该组号可以代表该组的表达式。其中,组号的编制规则为:从左到右、以分组的左括号“(”为标志,第一个分组的组号为1,第二个分组的组号为2,以此类推。  反向引用提供查找重复字符组的方便的方法。它们可被认为是再次匹配同一个字符串的快捷指令。后向引用可以使用数字命名(即默认名称)的组号,也可以使用指定命名的组号。它们的具体说明如表2-8所示

2008-03-24 14:38:00 1939

原创 2.9 零宽度断言

  在2.1.1小节中,元字符/b、^、$都匹配一个位置,且这个位置满足一定的条件。在此,把满足这一个条件称为断言或零宽度断言。正则表达式中的常用零宽度断言明如表2-10所示。表2-10 零宽度断言 字符(断言) 说明

2008-03-24 14:32:00 2357

原创 2.10 负向零宽度断言

  零宽度断言只能指定或匹配一个位置。而负向零宽度断言与零宽度断言恰恰相反,它能够指定或匹配不是一个位置,即所说的“反义”。特别是在匹配字符串中不包含指定的字符时,负向零宽度断言特别有用。以下正则表达式中的表达式a(?!b)将断言字符“a”之后不能为字符“b”。/b/w*a(?!b)/w*/b                                                   

2008-03-24 14:29:00 1487

原创 2.11 匹配选项

  匹配选项可以指定正则表达式匹配中的行为,如忽略大小写、处理多行、处理单行、从右到左开始执行匹配等。注意:本小节中下面介绍的匹配选项为.NET Framework所支持。   .NET Framework的正则表达式中的常用匹配选项说明如表2-11所示。表2-11 常用匹配选项 选项

2008-03-24 14:22:00 1342

原创 2.12 注释

  正则表达式中除了表达式的基本内容之外,还可以包括注释。其中,注释一般通过表达式(?#注释)是实现。以下正则表达式在第一个分组中中添加了注释“不能以数字开头”。(?不能以数字开头))[a-z_A-Z]+                                       (78)注意:如果要在正则表达式中包含注释,最好打开IgnorePatternWhitespace选项,即忽略

2008-03-24 14:21:00 991

原创 2.13 优先级顺序

  正则表达式存在元字符、转义符、限定符、|等操作或表达式。在匹配过程中,正则表达式都事先规定了这些操作或表达式的优先级。正则表达式也可以象数学表达式一样来求值。也就是说,正则表达式可以从左至右、并按照一个给定的优先级来求值。表2-12按照从最高优先级到最低优先级列出了正则表达式操作符的优先级顺序。表2-12 优先级顺序表

2008-03-24 14:20:00 1151

原创 2.14 递归匹配

  递归匹配在匹配具有嵌套结构的字符串时特别有效。给定算术表达式((1+2)*(3+4)),该表达式具有嵌套结构。如果需要使用正则表达式检查该表达式的结构是否正确,则使用递归匹配能够解决该问题。注意:本小节中下面介绍的递归匹配为.NET Framework所支持。  在.NET Framework中,正则表达式用于递归匹配的表达式说明如表2-13所示。表2-13优先级顺序表

2008-03-24 14:16:00 1342

原创 2.15 典型正则表达式解释(1)

  本小节解释基于正则表达式的基础理论的典型正则表达式,如匹配Windows操作系统的名称、匹配HTML标记、匹配HTML标记之间的内容。  1.匹配Windows操作系统的名称  Windows操作系统存在很多版本,如Windows 95、Windows 98、Windows 2000、Windows ME、Windows XP、Windows 2003等。以下正则表达式能够精确匹配Wi

2008-03-24 14:11:00 1401

原创 2.15 典型正则表达式解释(2)

  3.匹配HTML标记之间的内容  HTML标记一般被尖括号包围,如、、、等。以下正则表达式能够匹配HTML标记。(?/w+)>).*(?=>)                                        (84)  正则表达式(84)解释:      (?/w+)是一个分组,它的名称为“tag”。在该正则表表达式匹配过程,它将保存被匹配的内容。     

2008-03-24 14:02:00 1628

原创 第4章 字符串验证

本章节介绍字符串的验证,如英文单词的验证、文件名称的验证、网络常用元素的验证、非单词字符串的验证等。注意:本章节中被验证的字符串可能包含英文单词字符、数字字符和特殊字符。其中,特殊字符是指除英文单词字符和数字字符之外的字符,如/、/、|、,、:等。  

2008-03-24 13:58:00 944

原创 4.1 英文单词验证

本小节介绍与英文单词相关的验证,如小写英文单词验证、大写英文单词验证、英文单词分割字符验证、不包含验证、具有重复特征的英文单词验证。 

2008-03-24 13:56:00 1031

原创 4.1.1 小写单词验证

  小写英文单词由26个小写英文字母(a~z)组成,且英文单词的最小长度为1。以下正则表达式都能够验证小写英文单词。[a-z]+                                                                        (1)[a-z]{1,}                                                

2008-03-24 13:55:00 1143

原创 4.1.2 大写英文单词验证

  大写英文单词由26个大写英文字母(A~Z)组成,且英文单词的最小长度为1。以下正则表达式都能够验证大写英文单词。[A-Z]+                                                                       (13)[A-Z]{1,}                                                

2008-03-24 13:51:00 3088

原创 4.1.3 英文单词的分割符验证

  在英文文本中,各个英文单词被分隔符所分开。这些分隔符包括英文标点符号、空白字符等。其中,英文标点符号比较多,如,(逗号)、.(点号)、?(问号)、:(冒号)、;(分号)、(单引号)、!(感叹号)、"(双引号)、-(连接号)、--(破折号)、…(省略号)、()(小括号)、[](中括号)、{}(大括号)、`(所有格符号)等。  在英文文本中,有时需要验证两个英文单词是否被标点符号分开,或者是

2008-03-24 13:46:00 4821

原创 4.1.4 不包含验证

  不包含验证其实是一种否定验证。在此,它指验证英文单词中不存在指定的字母或者字符串。如验证英文单词中不存在字母A、验证英文单词中字母A之后不能为字母B等。注意:本小节中介绍的英文单词由大写英文字母构成,不考虑小写英文字母。  1.不包含指定字母的验证  在此,不妨设被指定的不包含的字母为A。以下正则表达式都能够验证不包含字母A的任意英文单词。/b[B-Z]+/b         

2008-03-24 13:36:00 1474

原创 4.1.4 不包含验证(2)

 当英文单词的结尾为字母B时,正则表达式/b[A-Z]*B[^P][A-Z]*/b将匹配失败。原因如下:       表达式[^P]总是要匹配一个字符;      当英文单词的结尾为字母B时,[^P]将会匹配该英文单词之后的分割符,如空格、句号等。  为了解决上述问题,可以使用零宽度负预测先行断言(?!experssion)。它能够断言自身位置的后面不能匹配字符串experssion。

2008-03-24 10:35:00 1012

原创 4.1.5 具有重复特征的英文单词验证(2)

2.至少存在两个相同字母英文单词的验证   至少存在两个相同字母英文单词也具有重复特征,可以使用后向引用来验证该类型的英文单词。以下  正则表达式都能够至少存在两个相同字母英文单词。/b[A-Z]*(?[A-Z])[A-Z]*(/k)+[A-Z]*/b                   (41)/b[A-Z]*([A-Z])[A-Z]*(/1)+[A-Z]*/b       

2008-03-24 10:27:00 2168

原创 4.2 文件名称和路径验证

每一个文件都拥有它的名称,该名称由两部分组成:文件名和文件扩展名。在此,把由文件名和文件扩展名组成的名称称为文件全名。本小节将介绍与文件名称和文件路径相关的验证。 

2008-03-24 10:23:00 927

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除