技术开发 频道

30分钟正则表达式指导

    【IT168 技术文档】 你是否曾经想过正则表达式是什么,怎样能够快速得到对它的一个基本的认识?我的目的就是在30分钟内带你入门并且对正则表达式有一个基本的理解。事实是正则表达式并没有它看起来那么复杂。学习它最好的办法就是开始写正则表达式并且不断实践。在最初的30分钟之后,你就应该知道一些基本的结构并且有能力在你的程序或者web页面中设计和使用正则表达式了。对那些想要深入研究的人,现在已经有很多非常好的可用资源来让你更深入的学习。

    到底什么是正则表达式?

   我相信你对模式匹配的“计算机通配符”字符应该比较熟悉了。例如,如果你想要在一个Windows文件夹中找到所有Mircosoft Word文件,你要搜索“*.doc”,因为你知道星号会被解释为一个通配符,它匹配所有序列的字符串。正则表达式就是这种功能的一个更加细节的扩展。

    在写处理文本的程序或者web页面时,定位匹配复杂模式的字符串是很常见的。正则表达式就是用来描述这类模式的。这样,一个正则表达式就是一个模式的缩减代码。例如,模式“w+”是表达“匹配任何包含字母数字字符的非空字符串”的精确方法。.NET框架提供了一个功能强大类库,它使得在你的应用程序中包含正则表达式更加容易。使用这个库,你可以轻易地搜索和替换文本,解码复杂的标题,解析语言,或者验证文本。

    学习正则表达式的神秘的语法的一个好办法是用例子作为开始学习的对象,然后实践创建自己的正则表达式。让我们开始吧!

    一些简单的例子
    搜索Elvis

    假设你要花费你所有的空余时间来扫描文档来寻找Elvis仍然活着的证据。你可以使用下面的正则表达式来搜索:

    1. elvis -- Find elvis
    这是搜索精确字符序列的一个完全合法的正则表达式。在.NET中,你可以轻松的设置选项来忽略字符的各种情况,所以这个表达式将会匹配“Elivs”,“ELVIS”,或者“eLvIs”。不幸的是,它也将匹配单词“pelvis”的后五个字母。我们可以改进这个表达式如下:

    2. elvis -- Find elvis as a whole word
现在事情变得更加有趣了。“”是一个特殊代码,它表示“匹配任何单词的开头或结尾的位置”。这个表达式将只匹配完整的拼写为“elvis”的单词,无论是小写的还是大写的情况。

    假设你想要找到所有这样的行,在其中单词“elvis”后面都跟着单词“alive”。句点或者点“.”是一个特殊代码匹配除了换行符之外的任何字符。星号“*”表示重复前面的部分有必要的次数以保证能够有一个匹配。这样,“.*”表示“匹配除了换行符之外的任意数目的字符”。现在建立一个表示“搜索在同一行内后面跟着单词‘alive’的单词‘elvis’”的表达式就是一件简单的事了。

    3. elvis.*alive -- Find text with "elvis" followed by "alive"
仅仅使用几个特殊字符我们就开始创建功能强大的正则表达式了,而且它们已经开始变得难以被我们人类理解了。

    让我们看看另一个例子。

    确定电话号码的合法性

    假设你的web页面收集顾客的7位电话号码,而且你希望验证输入的电话号码是正确的格式,“xxx-xxxx”,这里每个“x”是一个数字。下面的表达式将搜索整个文本寻找这样的一个字符串:

    4. ddd-dddd -- Find seven-digit phone number
每个“d”表示“匹配任何单个数字”。“-”没有特殊的意义并且按照字面解释,匹配一个连字符。要避免繁琐的重复,我们可以使用一个含有相同含义的速记符:

    5. d{3}-d{4} -- Find seven-digit phone number a better way
“d”后面的“{3}”表示“重复前面的字符三次”。


    .NET正则表达式的基础

    让我们探索一下.NET中正则表达式的基础

    特殊字符

    你应该知道几个有特殊意义的字符。你已经见过了“”,“.”,“*”,和“d”。要匹配任何空白字符,像空格,制表符和换行符,使用“s”。相似地,“w”匹配任何字母数字字符。

    让我们尝试更多的例子:

    6. aw* -- Find words that start with the letter a
这个搜索一个单词的开头(),然后是一个字母“a”,接着是任意次数重复的字母数字字符(w*),最后是一个单词的结尾()。

    7. d+ -- Find repeated strings of digits
这里,“+”与“*”是相似的,除了它需要至少一次重复。

    8. w{6} -- Find six letter words
在Expresso中测试这几个表达式,然后实践创建你自己的表达式。下面是一个说明有特殊含义的字符的表格:

0
相关文章