正则表达式(regular expression,即Regex)是说明大块文本的一种模式(pattern)。正则表达式引擎把这种模式运用到源文件文本中去。最初的源文本是不相关的——它可以是文本文件、网页的HTML源代码、甚至是数据库表格中的一个栏。
只需要使用几种记号(token),你就可以描述出复杂的模式,而且你还可以对这些模式作些很酷的事,如算术运算(也就是说,计算该模式出现的次数)。
正则表达式应用程序
用到正则表达式的应用程序太多了,以至于不能在本文全部列出,但我们还是列出了一部分让你大概看看正则表达式有些什么作用:
* 验证用户数据的有效性,用户数据(如电话号码、信用卡号码、电子邮件地址等等)可以来自网站或者本地应用程序。
* 在文本文件中搜索诸如“莎士比亚全集”(字数不得少于10个字符或者任意指定的字符数)这样的字句,或者搜索“love”以及“horse”(忽略大小写)并报告它们出现的位置和次数。
* 把重要的数据,如各个网站给出的足球比赛日程表,保存到我自己的数据库中去。
* 对网站搜索引擎来说,为正则表达式保持一个智能的前端并写出模式;然后所有其它工作交由.NET处理。
模式识别
模式是一个字符序列的代数表达式,它满足递加性(也就是说模式可以包含一系列其它模式)和递归性(也就是说模式可以包含子模式)。表A列出了正则表达式中常见的标记。
表A
|
标记 |
含义 |
|
. |
匹配任何单个字符(也就是说,“w.e”匹配“Brawley”,这里“.”匹配单字符“l”)。 |
|
\b |
用来指明不用考虑前后字符的单词(也就是说,定界符是空格、制表符或者逗号都不要紧)。 |
|
\w |
匹配任何单词字符(即A~Z、a~z,以及0~9)。 |
|
\W |
匹配任何非单词字符(即除A~Z、a~z,以及0~9之外的字符。 |
|
\d |
匹配任何数字。 |
|
\D |
匹配任何非数字。 |
|
\. |
表示你实际上搜索点号的换码序列(因为点号有其它意义,所以需要用换码的方式表示它)。 |
|
\s |
表示任何白空格(可以是制表符也可以是空格,我们并不关心它具体是什么)。 |
|
\S |
表示任何非白空格。 |
|
^ |
字符串或者行的起始标记。 |
|
$ |
字符串或者行的结束标记。 |
|
* |
用于指示零或者大于零发生了。 |
|
? |
指示任意字符(也就是说,零或者一发生了。 |
|
+ |
前一标记出现一次或者多次(也就是说“\w+”表示匹配任何字)。 |
|
[] |
表示一个范围,如[A-Z]表明匹配任何大写字母。 |
|
| |
OR(或)运算符,用来指示感兴趣的匹配的集合 |
|
() |
与“|”相同。 |
常见正则表达式标记
例如,模式“M[aeiouy]”表示以字符“M”开头,后面跟着任何元音字母(a、e、i、o、u或者y)的字符组合,而模式“M[^aeiouy]”表示字符“M”后没有跟着元音字母的字符组合。
