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分钟入门教程

最近在看标准的Qt/QML相关的内容,上面有简短的ECMAScript内容中提到了 regExp的内容,但是实在是看不懂+看不明白,习惯了C系类风格的编程,再来看脚本类型的语言,一方面觉得轻松简单强大...

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

正则表达式30分钟入门教程 版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 目录 跳过目录 本文目标如何使用本教程正则表达式到底是什么东西?入...

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

正则表达式30分钟入门教程版本:v2.31 (2009-4-11) 作者:deerchao 转载请注明来源目录跳过目录本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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