正则表达式释疑(regular-expression)

上传人:mg****85 文档编号:45551783 上传时间:2018-06-17 格式:PDF 页数:24 大小:267.36KB
返回 下载 相关 举报
正则表达式释疑(regular-expression)_第1页
第1页 / 共24页
正则表达式释疑(regular-expression)_第2页
第2页 / 共24页
正则表达式释疑(regular-expression)_第3页
第3页 / 共24页
正则表达式释疑(regular-expression)_第4页
第4页 / 共24页
正则表达式释疑(regular-expression)_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《正则表达式释疑(regular-expression)》由会员分享,可在线阅读,更多相关《正则表达式释疑(regular-expression)(24页珍藏版)》请在金锄头文库上搜索。

1、搜集整理:搜集整理: 北京网站建设网北京网站建设网 google 网站推广网站推广 正则表达式释疑正则表达式释疑 一、简介 正则表达式这个名词,相信很多人都听说过,这个名词最早起源于 1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是 Unix 的主

2、要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。 Q: 正则表达式,能够为我们做什么呢? A: 基于文本的编辑器和搜索工具中的一个重要部分。 正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及 WEB 页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。 下面我们就一步一步的结合它的语法,来介绍正则表达式的使用。 二、初次接触正则表达式 我们先来了解正则表达式的一些基本概念。正则表达式作为一种表示语言,其定义了自己的一套描述方式,来描述各种各样的字符类。下面摘取msdn中的一段定义。(ms

3、-help:/MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpconcharacterclasses.htm) 字符转义表 字符类 含义 . 与除 n 以外的任何字符匹配。如果通过 Singleline 选项(请参阅正则表达式选项)进行了修改,则句点字符与任何字符匹配。 aeiou 与指定字符集中包含的任何单个字符匹配。 aeiou 与不在指定字符集中的任何单个字符匹配。 0-9a-fA-F 使用连字号 () 允许指定连续字符范围。 pname 1 北京网站建设网北京网站建设网 网站推广网站推广 google 推广推广 google 优化优化 google 网站

4、排名专家网站排名专家 搜集整理:搜集整理: 北京网站建设网北京网站建设网 google 网站推广网站推广 与 name 指定的命名字符类中的任何字符匹配。支持的名称为 Unicode 组和块范围。例如 Ll?Nd?Z?IsGreek?IsBoxDrawing。 Pname 与在 name 中指定的组和块范围中未包含的文本匹配。 w 与任何单词字符匹配。等效于 Unicode 字符类别 pLlpLupLtpLopNdpPc。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 w 等同于 a-zA-Z_0-9。 W 与任何非单词字符匹配。等效于 Unicode 类别

5、pLlpLupLtpLopNdpPc。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 W 等同于 a-zA-Z_0-9。 s 与任何空白字符匹配。等效于 Unicode 字符类别 fnrtvx85pZ。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 s 等同于 fnrtv。 S 与任何非空白字符匹配。等效于 Unicode 字符类别 fnrtvx85pZ。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 S 等同于 fnrtv。 d 与任何十进制数字匹配。与 Unicode 的 pNd 和非 U

6、nicode 的 0-9 以及 ECMAScript 行为一样。 D 与任何非数字匹配。与 Unicode 的 PNd 和非 Unicode 的 0-9 以及 ECMAScript 行为一样。 上表列举了,正则表达式中最最基本的语法定义,了解这些,我们已经可以定义一些简单的规则了,例如: 1 匹配所有的字符 当然是什么都不用写(_) 2 匹配所有的英文字符 a) w b) a-zA-Z_0-9 3 匹配十进制数字 2 北京网站建设网北京网站建设网 网站推广网站推广 google 推广推广 google 优化优化 google 网站排名专家网站排名专家 搜集整理:搜集整理: 北京网站建设网北京

7、网站建设网 google 网站推广网站推广 a) d b) 0-9 看上面的例子,是不是觉得很简单呢,不过,到目前为止,这样写出来的规则,还有一个很大的缺陷,就是没有声明匹配字符的个数? Q: 我希望要匹配的字符为 5 个英文字母 A: ? 光了解上面的知识是,无法解决这个的 L。那正则表达式中是如何解决这个问题的呢,我们来看下面这个表: (ms-help:/MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpconquantifiers.htm) 限定符表 限定符 说明 * 指定零个或更多个匹配;例如 w* 或 (abc)*。与 0, 相同。 + 指定一个或多个匹配

8、;例如 w+ 或 (abc)+。与 1, 相同。 ? 指定零个或一个匹配;例如 w? 或 (abc)?。与 0,1 相同。 n 指定恰好 n 个匹配;例如 (pizza)2。 n, 指定至少 n 个匹配;例如 (abc)2,。 n,m 指定至少 n 个但不多于 m 个匹配。 *? 指定尽可能少地使用重复的第一个匹配 (lazy *)。 +? 指定尽可能少地使用重复但至少使用一次 (lazy +)。 3 北京网站建设网北京网站建设网 网站推广网站推广 google 推广推广 google 优化优化 google 网站排名专家网站排名专家 搜集整理:搜集整理: 北京网站建设网北京网站建设网 go

9、ogle 网站推广网站推广 ? 指定使用零次重复(如有可能)或一次重复 (lazy ?)。 n? 等效于 n (lazy n)。 n,? 指定尽可能少地使用重复,但至少使用 n 次 (lazy n,)。 n,m? 指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy n,m)。 上表中列出了,正则表达式的限定方式,配合这些字符的使用,我们就可以很方便的编写更为强劲的正则表达式了。 例如: 1 匹配零个或多个所有的字符 * 2 匹配一个或多个所有字符 + 3 匹配零个或多个所有的英文字符 w* 4 匹配一个或多个所有的英文字符 a-zA-Z0-9+ 5 匹配 3 个十进制数字 d3 6

10、 匹配最少 3 个十进制数字 d3, 7 匹配 3 个到 6 个十进制数字 4 北京网站建设网北京网站建设网 网站推广网站推广 google 推广推广 google 优化优化 google 网站排名专家网站排名专家 搜集整理:搜集整理: 北京网站建设网北京网站建设网 google 网站推广网站推广 d3,6 现在我们可以解答上面问题了: Q: 我希望要匹配的字符为 5 个英文字母 A: w5 很高兴,我们已解决了上面的问题,不过,新的问题总是在不断的出现。我如何限制匹配字符出现在哪里呢? Q: 我希望匹配以 doc 开头的字符串 A: ? 为了解决这个问题,我们先来看看这个表: (ms-he

11、lp:/MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpconatomiczero-widthassertions.htm) 原子零宽度断言 断言 说明 指定匹配必须出现在字符串的开头或行的开头。有关更多信息,请参阅正则表达式选项中的 Multiline 选项。 $ 指定匹配必须出现在以下位置:字符串结尾、字符串结尾的 n 之前或行的结尾。有关更多信息,请参阅正则表达式选项中的 Multiline 选项。 A 指定匹配必须出现在字符串的开头(忽略 Multiline 选项) 。 Z 指定匹配必须出现在字符串的结尾或字符串结尾的 n 之前(忽略 Multiline

12、选项) 。 z 指定匹配必须出现在字符串的结尾(忽略 Multiline 选项) 。 G 指定匹配必须出现在当前搜索开始的位置(此位置通常是上一次搜索结束位置之后的第一个字符) 。例如,请考虑一个由分离的字符组组成的串联字符串,其中每一组的长度都为 n 个字符。在每个字符组中搜索匹配时,如果正则表达式在 0、n、2n、3n 等字符位置找到匹配,则该正则表达式成功。仅当匹配出现在定5 北京网站建设网北京网站建设网 网站推广网站推广 google 推广推广 google 优化优化 google 网站排名专家网站排名专家 搜集整理:搜集整理: 北京网站建设网北京网站建设网 google 网站推广网

13、站推广 位组边界上时才会成功。 b 指定匹配必须出现在 w(字母数字)和 W(非字母数字)字符之间的边界上。匹配必须出现在单词边界上,即出现在由空格分隔的单词中第一个或最后一个字符上。 B 指定匹配不得出现在 b 边界上。 相信大家都注意到了,在这个表中第一个断言字符就是我们需要的_. 例如, 指定当前位置在行或字符串的开头。因此,正则表达式 FTP 只会返回那些在行的开头出现的字符串“FTP”的匹配项。 看来上面碰到的问题,又可以解决了,让我们一起来解决上面的问题: Q: 我希望匹配以 doc 开头的字符串 A: doc 以上我们初步了解了什么是正则表达式,已经了解其最基本的语法,当作热身_

14、,接下来,才正式进入主题,我们会从第二篇开始深入探讨正则表达式的使用。 在前一篇文章中,介绍了一些初步的正则表达式的基本概念,相信很多人对正则表达式的基本知识有所了解,接下来,我们结合一些实际的编程示例来掩饰说明正则表达式的作用。 首先,我们先看几个实际的例子: 1 验证输入字符是否全部为英文字符 javascript: var ex = “w+$“; var re = new RegExp(ex,“i“); return re.test(str); VBScript Dim regEx,flag,ex ex = “w+$“ 6 北京网站建设网北京网站建设网 网站推广网站推广 google 推广推广 google 优化优化 google 网站排名专家网站排名专家 搜集整理:搜集整理: 北京网站建设网北京网站建设网 google 网站推广网站推广 Set regEx = New RegExp regEx.IgnoreCase = True regEx.Global = True regEx.Pattern = ex flag = regEx.Test( str ) C# System.String ex = “w+$“; System.Text.RegularExpressions.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号