30分钟学习正则表达式指南

翻译 2006年06月23日 23:03:00

30分钟学习正则表达式指南
Jim Hollenhorst
(原文:http://www.codeproject.com/dotnet/regextutorial.asp
在30分钟内学习使用正则表达式

(翻译别人的文章还真是很有难度呀,看来自己得加强英文水平了)

使用Expresso学习.net正则表达式

你曾经很想知道什么正则表达式,并且想很快地对它有一个基本的了解吗?我写这篇文章的目的就是使你在30分钟内能够对正则表达式有个很好的了解。事实上正则表达式并没有他们看起来那么复杂。最好的学习方式就是边写边实践。经过你的头半个小时学习,你应该知道一些基本的构造,能够在你的程序或者网页中设计和使用正则表达式。除了你已经很喜欢的这些东西,还有很多优秀的资源供你进一步学习。

正则表达式到底是个什么鬼东西?

确信你一定经常看到“通配符”(wildcard)在正则匹配中的使用。例如,如果你想在Windows目录汇总查找所有的微软Word文件,就使用“*.doc”查找,因为你知道星号(*)是通配符,被认为可以匹配任何顺序字符串。正则表达式就是在具有这样的功能基础上进一步的延深。
在熟练编码或者网页制作是,很频繁而且很有必要地去查找匹配复杂模式的字符串。正则表达式就自然用来描述这样的负责模式。结果,正则表达式仅仅就是一个个模式的简捷代码。例如,模式“/w+”就是一个简练的方式去表达“匹配任何非空字符组成的字符串”。.NET框架提供了很强大的类库,使得你很容易在你的应用中使用正则表达式。使用这个类库,你可以很容易查找和替换文本、破译复杂的报头、解析语言或者验证文本。
一种很好的学习这种不可思议正则表达式语法的方式就是:从实例开始,然后开始你自己的创造。本指南仅仅介绍正则表达式的基础,在Expresso类库中给出了很多的实例。Expresso可以用来验证实例以及你自己实践的正则表达式。
让我们开始吧。

一些简单的实例
查找Elivs
假设你花掉所有的空闲时间在文档中来寻找Elvis认然活着的证据。你可以使用以下的正则表达式:

1. elvis 查找elvis

这个正则表达式完全有效的查找一致顺序的字符。在.NET中,你可以很轻松的设定忽略字母大小写,一次这个表达式也可能匹配“Elvis”、“ELVIS”或者“eLvIs”。不幸的是,它也将匹配后五个字符为“pelvis”的字符串。我们可以如下改进表达式:

2 /belvis/b 把elvis作为一个整体查找

现在事情变得更有趣了。“/b”是一个特殊意义的编码:在开始或者结尾匹配词语。这个表达式仅仅匹配完整的词语“elvis”,当然忽略了字母的大小写。
假如你在所有的行中查找后面跟着“alive”的词语“elvis”。句号“.”就是一个可以匹配除换行符之外的特殊编码。星号“*”表示可以无限次重复匹配先前的查询条件。这样的话,“.*”意味着“匹配除换行符外的任何字符”。所以,在同一行中查找elvis后面跟着alive的正则表达式就很容易写出来了。

3 /belvis/b.*/balive/b 可以查找后面跟着 "alive"的"elvis"

使用仅仅几个特殊的字符,我们就可以开始建立强大的正则表达式,而这些表达式我们曾经认为很困难去阅读。
让我们再试试另外一个例子。

判断电话号码的有效性

假设你的网页收集客户的7位数字的电话号码,你想验证这些电话号码数字是否格式正确,"×××-××××",每一个“×”都是一个数字。下面这个表达式可以很好查找这样的字符串:

4 /b/d/d/d-/d/d/d/d 查找7位数字的电话号码

每一个“/d”表示“匹配任意一个单一数字”。“-”没有任何特殊的含义,仅仅是其本来的字面含义,匹配一个连接符。为避免烦人的重复,我们可以使用代表同样意义的快捷符号:

5/b/d{3}-/d{4} 能够更好的查找7位数字的电话号码

紧跟“/d”的“{3}”表示“重复前面的字符3次”。让我们开始学习怎么样去测试这个表达式。

Expresso

如果你并没有发现正则表达式很难阅读,你很有可能是个白痴专家或者来至另外一个星球。任何人对这些符号都印象深刻,包括那些频繁使用和测试表达式的人。有很多的测试工具存在,但是我更偏向我自己的工具:Expresso,来源于CodeProject,以下演示的是2.0版本。如果你想得到较新的版本,你可以去http://www.ultrapico.com/上查找。
从得到、安装Expresso以及从Windows程序菜单选择指南,可以通过使用“Expression Library”标签来选择使用每一个实例。

图1 Expresso 运行实例5

通过选择第一个实例,“1.Find Elvis”。通过点击Run Match然后查看右边的树。注意那里有好几处匹配。点击每一处可以看到在实例中匹配的每一个位置。运行第二个、第三个实例,注意到“pelvis”没有相关的匹配项。最终,运行第四个以及第五个实例;都应该在文本中看到同样的数目。试着去掉开始的“/b”,你会发现邮政编码也匹配电话号码的格式。

.NET正则表达式基础

让我们开始学习.NET中的正则表达式吧。

特殊字符

目前,你应该大概了解一些具有特殊含义的字符了吧。你已经遇到:“/b”、“.”、“*”以及“/d”。如果想匹配任何空白的字符,比如空格、制表符(tabs)以及换行,你可以使用“/s”。同样的,“/w”匹配任何文字或者数字字符。
让我们开始一些其他的实例:

6 /ba/w*/b查找以字母a开始的词组

这个以查找词组的起始位置(/b),然后是字母“b”,然后是任何重复的文字或者数字字符(/w*),然后是词组的结尾(/b)。

<未完>

正则表达式30分钟入门教程(骗人的,我花了一个多小时)

目录 跳过目录 本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配...

正则表达式30分钟入门教程

http://deerchao.net/tutorials/regex/regex.htm 要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的...

正则表达式30分钟入门教程

首页 | 常用正则表达式 | 正则表达式测试工具 正则表达式30分钟入门教程 版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 目录 跳过目录 本文目标 如何使用...

正则表达式30分钟入门教程

如果你没有正则表达式的基础,请跟着教程“一步步来”。请不要大概地扫两眼就说看不懂——以这种态度我写成什么样你也看不懂。当我告诉你这是“30分钟入门教程”时,请不要试图在30秒内入门。 事实是,我...

正则表达式30分钟教程

转自: http://www.cnblogs.com/wddavid/archive/2007/05/12/743669.html 本文目标 30分钟内让你明白正则表达式是什...

正则表达式30分钟入门教程

正则表达式详细介绍。

正则表达式30分钟入门教程

本文目标   30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。   如何使用本教程   最重要的是——请给我30分钟, 如果你没有使用正则表达式的经...

了解和使用keystone(二)安装keystone

在14.04和16.04下安装keystone,都能支持v3的api,区别前者版本0.7.1.后者2.3.1,主要是后者数据库中表格增加,换言之,增加了元素,提供了更丰富的关联逻辑。 如果我们要基于k...

正则表达式排除特定字符串

1.例子,查找不以baidu开头的字符串。 baidu.com sina.com.cn 正则:^(?!baidu).*$  匹配结果就是第2行,也就是第1行被排除了 这里使用了零宽度断言(?!...
  • bravezhe
  • bravezhe
  • 2012年12月16日 14:23
  • 53538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:30分钟学习正则表达式指南
举报原因:
原因补充:

(最多只允许输入30个字)