ASP正则表达式系统教程

上传人:积*** 文档编号:121562535 上传时间:2022-07-19 格式:DOC 页数:11 大小:37.50KB
收藏 版权申诉 举报 下载
ASP正则表达式系统教程_第1页
第1页 / 共11页
ASP正则表达式系统教程_第2页
第2页 / 共11页
ASP正则表达式系统教程_第3页
第3页 / 共11页
资源描述:

《ASP正则表达式系统教程》由会员分享,可在线阅读,更多相关《ASP正则表达式系统教程(11页珍藏版)》请在装配图网上搜索。

1、ASP:正则体现式系统教程(推荐)近来学习正则体现式,看到这篇文章,很不错。前言正则体现式是啰嗦的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参照,掌握正则体现式不是问题。索引1. 引子目前,正则体现式已经在诸多软件中得到广泛的应用,涉及*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及诸多的应用软件中,都可以看到正则体现式的影子。正则体现式的使用,可以通过简朴的措施来实现强大的功能。为了简朴有效而又不失强大,导致了正则体现式代码的难度较大,学习起来也不是很容易,因此需要付出

2、某些努力才行,入门之后参照一定的参照,使用起来还是比较简朴有效的。例子: .+.+.+$ 这样的代码曾经多次把我自己给吓退过。也许诸多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。注意:这里的第7部分跟前面的内容看起来似乎有些反复,目的是把前面表格里的部分重新描述了一次,目的是让这些内容更容易理解。2. 正则体现式的历史正则体现式的“祖先”可以始终上溯至对人类神经系统如何工作的初期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1Array56 年, 一位叫 Stephen Kleene

3、 的数学家在 McCulloch 和 Pitts 初期工作的基本上,刊登了一篇标题为“神经网事件的表达法”的论文,引入了正则体现式的概念。正则体现式就是用来描述她称为“正则集的代数”的体现式,因 此采用“正则体现式”这个术语。随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的某些初期研究,Ken Thompson 是 Unix 的重要发明人。正则体现式的第一种实用应用程序就是 Unix 中的 qed 编辑器。如她们所说,剩余的就是众所周知的历史了。从那时起直至目前正则体现式都是基于文本的编辑器和搜索工具中的一种重要部分。3. 正则体现式定义正则体现式(regular

4、 expression)描述了一种字符串匹配的模式,可以用来检查一种串与否具有某种子串、将匹配的子串做替代或者从某个串中取出符合某个条件的子串等。列目录时,dir *.txt或ls *.txt中的*.txt就不是一种正则体现式,由于这里*与正则式的*的含义是不同的。 正则体现式是由一般字符(例如字符 a 到 z)以及特殊字符(称为元字符)构成的文字模式。正则体现式作为一种模板,将某个字符模式与所搜索的字符串进行匹配。3.1 一般字符由所有那些未显式指定为元字符的打印和非打印字符构成。这涉及所有的大写和小写字母字符,所有数字,所有标点符号以及某些符号。 3.2 非打印字符字符 含义 cx 匹配由

5、x指明的控制字符。例如, cM 匹配一种 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一种原义的 c 字符。 f 匹配一种换页符。等价于 x0c 和 cL。 n 匹配一种换行符。等价于 x0a 和 cJ。 r 匹配一种回车符。等价于 x0d 和 cM。 s 匹配任何空白字符,涉及空格、制表符、换页符等等。等价于 fnrtv。 S 匹配任何非空白字符。等价于 fnrtv。 t 匹配一种制表符。等价于 x0Array 和 cI。 v 匹配一种垂直制表符。等价于 x0b 和 cK。 3.3 特殊字符所谓特殊字符,就是某些有特殊含义的字符,如上面说的*.t

6、xt中的*,简朴的说就是表达任何字符串的意思。如果要查找文献名中有的文献,则需要对进行转义,即在其前加一种。ls *.txt。正则体现式有如下特殊字符。特别字符 阐明 $ 匹配输入字符串的结尾位置。如果设立了 RegExp 对象的 Multiline 属性,则 $ 也匹配 n 或 r。要匹配 $ 字符自身,请使用 $。 ( ) 标记一种子体现式的开始和结束位置。子体现式可以获取供后来使用。要匹配这些字符,请使用 ( 和 )。 * 匹配前面的子体现式零次或多次。要匹配 * 字符,请使用 *。 + 匹配前面的子体现式一次或多次。要匹配 + 字符,请使用 +。 . 匹配除换行符 n之外的任何单字符。

7、要匹配 .,请使用 。 标记一种中括号体现式的开始。要匹配 ,请使用 。 ? 匹配前面的子体现式零次或一次,或指明一种非贪婪限定符。要匹配 ? 字符,请使用 ?。 将下一种字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, n 匹配字符 n。n 匹配换行符。序列 匹配 ,而 ( 则匹配 (。 匹配输入字符串的开始位置,除非在方括号体现式中使用,此时它表达不接受该字符集合。要匹配 字符自身,请使用 。 标记限定符体现式的开始。要匹配 ,请使用 。 | 指明两项之间的一种选择。要匹配 |,请使用 |。 构造正则体现式的措施和创立数学体现式的措施同样。也就是用多种元字符与操作符将小

8、的体现式结合在一起来创立更大的体现式。正则体现式的组件可以是单个的字符、字符集合、字符范畴、字符间的选择或者所有这些组件的任意组合。 3.4 限定符限定符用来指定正则体现式的一种给定组件必须要浮现多少次才干满足匹配。有*或+或?或n或n,或n,m共6种。*、+和?限定符都是贪婪的,由于它们会尽量多的匹配文字,只有在它们的背面加上一种?就可以实现非贪婪或最小匹配。正则体现式的限定符有:字符 描述 * 匹配前面的子体现式零次或多次。例如,zo* 能匹配 z 以及 zoo。* 等价于0,。 + 匹配前面的子体现式一次或多次。例如,zo+ 能匹配 zo 以及 zoo,但不能匹配 z。+ 等价于 1,。

9、 ? 匹配前面的子体现式零次或一次。例如,do(es)? 可以匹配 do 或 does 中的do 。? 等价于 0,1。 n n 是一种非负整数。匹配拟定的 n 次。例如,o2 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o。 n, n 是一种非负整数。至少匹配n 次。例如,o2, 不能匹配 Bob 中的 o,但能匹配 foooood 中的所有 o。o1, 等价于 o+。o0, 则等价于 o*。 n,m m 和 n 均为非负整数,其中n = m。至少匹配 n 次且最多匹配 m 次。例如,o1,3 将匹配 fooooood 中的前三个 o。o0,1 等价于 o?。请注旨在逗号和两

10、个数之间不能有空格。 3.5 定位符用来描述字符串或单词的边界,和$分别指字符串的开始与结束,b描述单词的前或后边界,B表达非单词边界。不能对定位符使用限定符。 3.6 选择用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一种副作用,是有关的匹配会被缓存,此时可用?:放在第一种选项前来消除这种副作用。其中?:是非捕获元之一,尚有两个非捕获元是?=和?!,这两个尚有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则体现式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则体现式模式的位置来匹配搜索字符串。 3.7 后向引用 对一种正则体现式模式或部分模式两

11、边添加圆括号将导致有关匹配存储到一种临时缓冲区中,所捕获的每个子匹配都按照在正则体现式模式中从左至右所遇到的内 容存储。存储子匹配的缓冲区编号从 1 开始,持续编号直至最大 ArrayArray 个子体现式。每个缓冲区都可以使用 n 访问,其中 n 为一种标记特定缓冲区的一位或两位十进制数。可以使用非捕获元字符 ?:, ?=, or ?! 来忽视对有关匹配的保存。 4. 多种操作符的运算优先级相似优先级的从左到右进行运算,不同优先级的运算先高后低。多种操作符的优先级从高到低如下:操作符 描述 转义符 (), (?:), (?=), 圆括号和方括号 *, +, ?, n, n, n,m 限定符

12、, $, anymetacharacter 位置和顺序 | “或”操作 5. 所有符号解释字符 描述 将下一种字符标记为一种特殊字符、或一种原义字符、或一种 向后引用、或一种八进制转义符。例如,n 匹配字符 n。n 匹配一种换行符。序列 匹配 而 ( 则匹配 (。 匹配输入字符串的开始位置。如果设立了 RegExp 对象的 Multiline 属性, 也匹配 n 或 r 之后的位置。 $ 匹配输入字符串的结束位置。如果设立了RegExp 对象的 Multiline 属性,$ 也匹配 n 或 r 之前的位置。 * 匹配前面的子体现式零次或多次。例如,zo* 能匹配 z 以及 zoo。* 等价于0

13、,。 + 匹配前面的子体现式一次或多次。例如,zo+ 能匹配 zo 以及 zoo,但不能匹配 z。+ 等价于 1,。 ? 匹配前面的子体现式零次或一次。例如,do(es)? 可以匹配 do 或 does 中的do 。? 等价于 0,1。 n n 是一种非负整数。匹配拟定的 n 次。例如,o2 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o。 n, n 是一种非负整数。至少匹配n 次。例如,o2, 不能匹配 Bob 中的 o,但能匹配 foooood 中的所有 o。o1, 等价于 o+。o0, 则等价于 o*。 n,m m 和 n 均为非负整数,其中n = m。至少匹配 n 次且

14、最多匹配 m 次。例如,o1,3 将匹配 fooooood 中的前三个 o。o0,1 等价于 o?。请注旨在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一种其她限制符 (*, +, ?, n, n, n,m) 背面时,匹配模式是非贪婪的。非贪婪模式尽量少的匹配所搜索的字符串,而默认的贪婪模式则尽量多的匹配所搜索的字符串。例如,对于字符串 oooo,o+? 将匹配单个 o,而 o+ 将匹配所有 o。 . 匹配除 n 之外的任何单个字符。要匹配涉及 n 在内的任何字符,请使用象 .n 的模式。 (pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matche

15、s 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0$Array 属性。要匹配圆括号字符,请使用 ( 或 )。 (?:pattern) 匹配 pattern 但不获取匹配成果,也就是说这是一种非获取匹配,不进行存储供后来使用。这在使用 或 字符 (|) 来组合一种模式的各个部分是很有用。例如, industr(?:y|ies) 就是一种比 industry|industries 更简略的体现式。 (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一种非获取匹配,也就是说,该匹配不需要获取供后来使用。

16、例如,Windows (?=Array5|Array8|NT|) 能匹配 Windows 中的 Windows ,但不能匹配 Windows 3.1 中的 Windows。预查不消耗字符,也就是说,在一种匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从涉及预查的字符之后开始。 (?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一种非获取匹配,也就是说,该匹配不需要获取供后来使用。例如Windows (?!Array5|Array8|NT|) 能匹配 Windows 3.1 中的 Windows,但不能匹配 Windows 中的 W

17、indows。预查不消耗字符,也就是说,在一种匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从涉及预查的字符之后开始 x|y 匹配 x 或 y。例如,z|food 能匹配 z 或 food。(z|f)ood 则匹配 zood 或 food。 xyz 字符集合。匹配所涉及的任意一种字符。例如, abc 可以匹配 plain 中的 a。 xyz 负值字符集合。匹配未涉及的任意字符。例如, abc 可以匹配 plain 中的p。 a-z 字符范畴。匹配指定范畴内的任意字符。例如,a-z 可以匹配 a 到 z 范畴内的任意小写字母字符。 a-z 负值字符范畴。匹配任何不在指定范畴内的任

18、意字符。例如,a-z 可以匹配任何不在 a 到 z 范畴内的任意字符。 b 匹配一种单词边界,也就是指单词和空格间的位置。例如, erb 可以匹配never 中的 er,但不能匹配 verb 中的 er。 B 匹配非单词边界。erB 能匹配 verb 中的 er,但不能匹配 never 中的 er。 cx 匹配由 x 指明的控制字符。例如, cM 匹配一种 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一种原义的 c 字符。 d 匹配一种数字字符。等价于 0-Array。 D 匹配一种非数字字符。等价于 0-Array。 f 匹配一种换页符。等价于

19、x0c 和 cL。 n 匹配一种换行符。等价于 x0a 和 cJ。 r 匹配一种回车符。等价于 x0d 和 cM。 s 匹配任何空白字符,涉及空格、制表符、换页符等等。等价于 fnrtv。 S 匹配任何非空白字符。等价于 fnrtv。 t 匹配一种制表符。等价于 x0Array 和 cI。 v 匹配一种垂直制表符。等价于 x0b 和 cK。 w 匹配涉及下划线的任何单词字符。等价于A-Za-z0-Array_。 W 匹配任何非单词字符。等价于 A-Za-z0-Array_。 xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为拟定的两个数字长。例如,x41 匹配 A。x041 则等

20、价于 x04 & 1。正则体现式中可以使用 ASCII 编码。. num 匹配 num,其中 num 是一种正整数。对所获取的匹配的引用。例如,(.)1 匹配两个持续的相似字符。 n 标记一种八进制转义值或一种向后引用。如果 n 之前至少 n 个获取的子体现式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一种八进制转义值。 nm 标记一种八进制转义值或一种向后引用。如果 nm 之前至少有 nm 个获得子体现式,则 nm 为向后引用。如果 nm 之前至少有 n 个获取,则 n 为一种后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0

21、-7),则 nm 将匹配八进制转义值 nm。 nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 un 匹配 n,其中 n 是一种用四个十六进制数字表达的 Unicode 字符。例如, u00AArray 匹配版权符号 (?)。 6. 部分例子正则体现式 阐明 /b(a-z+) 1b/gi 一种单词持续浮现的位置 /(w+):/(/:+)(:d*)?(# *)/ 将一种URL解析为合同、域、端口及相对途径 /(?:Chapter|Section) 1-Array0-Array0,1$/ 定位章节的位置 /-a-z/ A至z共26

22、个字母再加一种-号。 /terb/ 可匹配chapter,而不能terminal /Bapt/ 可匹配chapter,而不能aptitude /Windows(?=Array5 |Array8 |NT )/ 可匹配WindowsArray5或WindowsArray8或WindowsNT,当找到一种匹配后,从Windows背面开始进行下一次的检索匹配。 7. 正则体现式匹配规则7.1 基本模式匹配一切从最基本的开始。模式,是正规体现式最基本的元素,它们是一组描述字符串特性的字符。模式可以很简朴,由一般的字符串构成,也可以非常复杂,往往用特殊的字符表达一种范畴内的字符、反复浮现,或表达上下文。例

23、如:once 这个模式涉及一种特殊的字符,表达该模式只匹配那些以once开头的字符串。例如该模式与字符串once upon a time匹配,与There once was a man from NewYork不匹配。正如如符号表达开头同样,$符号用来匹配那些以给定模式结尾的字符串。bucket$ 这个模式与Who kept all of this cash in a bucket匹配,与buckets不匹配。字符和$同步使用时,表达精确匹配(字符串与模式同样)。例如:bucket$ 只匹配字符串bucket。如果一种模式不涉及和$,那么它与任何涉及该模式的字符串匹配。例如:模式once 与字

24、符串There once was a man from NewYorkWho kept all of his cash in a bucket.是匹配的。 在该模式中的字母(o-n-c-e)是字面的字符,也就是说,她们表达该字母自身,数字也是同样的。其她某些稍微复杂的字符,如标点符号和白字符(空 格、制表符等),要用到转义序列。所有的转义序列都用反斜杠()打头。制表符的转义序列是:t。因此如果我们要检测一种字符串与否以制表符开头,可以 用这个模式:t 类似的,用n表达“新行”,r表达回车。其她的特殊符号,可以用在前面加上反斜杠,如反斜杠自身用表达,句号.用.表达,以此类推。7.2 字符簇在IN

25、TERNET的程序中,正规体现式一般用来验证顾客的输入。当顾客提交一种FORM后来,要判断输入的电话号码、地址、EMAIL地址、信用卡号码等与否有效,用一般的基于字面的字符是不够的。因此要用一种更自由的描述我们要的模式的措施,它就是字符簇。要建立一种表达所有元音字符的字符簇,就把所有的元音字符放在一种方括号里:AaEeIiOoUu 这个模式与任何元音字符匹配,但只能表达一种字符。用连字号可以表达一种字符的范畴,如:a-z /匹配所有的小写字母 A-Z /匹配所有的大写字母 a-zA-Z /匹配所有的字母 0-Array /匹配所有的数字 0-Array.- /匹配所有的数字,句号和减号 frt

26、n /匹配所有的白字符 同样的,这些也只表达一种字符,这是一种非常重要的。如果要匹配一种由一种小写字母和一位数字构成的字符串,例如z2、t6或g7,但不是ab2、r2d3 或b52的话,用这个模式:a-z0-Array$ 尽管a-z代表26个字母的范畴,但在这里它只能与第一种字符是小写字母的字符串匹配。前面曾经提到表达字符串的开头,但它尚有此外一种含义。当在一组方括号里使用是,它表达“非”或“排除”的意思,常常用来剔除某个字符。还用前面的例子,我们规定第一种字符不能是数字:0-Array0-Array$ 这个模式与&5、g7及-2是匹配的,但与12、66是不匹配的。下面是几种排除特定字符的例子

27、:a-z /除了小写字母以外的所有字符 / /除了()(/)()之外的所有字符 /除了双引号()和单引号()之外的所有字符 特殊字符. (点,句号)在正规体现式中用来表达除了“新行”之外的所有字符。因此模式.5$与任何两个字符的、以数字5结尾和以其她非“新行”字符开头的字符串匹配。模式.可以匹配任何字符串,除了空串和只涉及一种“新行”的字符串。PHP的正规体现式有某些内置的通用字符簇,列表如下:字符簇含义 :alpha: 任何字母 :digit: 任何数字 :alnum: 任何字母和数字 :space: 任何白字符 :upper: 任何大写字母 :lower: 任何小写字母 :punct: 任

28、何标点符号 :xdigit: 任何16进制的数字,相称于0-Arraya-fA-F 7.3 拟定反复浮现到目前为止,你已经懂得如何去匹配一种字母或数字,但更多的状况下,也许要匹配一种单词或一组数字。一种单词有若干个字母构成,一组数字有若干个单数构成。跟在字符或字符簇背面的花括号()用来拟定前面的内容的反复浮现的次数。 字符簇 含义 a-zA-Z_$ 所有的字母和下划线 :alpha:3$ 所有的3个字母的单词 a$ 字母a a4$ aaaa a2,4$ aa,aaa或aaaa a1,3$ a,aa或aaa a2,$ 涉及多于两个a的字符串 a2, 如:aardvark和aaab,但apple不

29、行 a2, 如:baad和aaa,但Nantucket不行 t2 两个制表符 .2 所有的两个字符 这些例子描述了花括号的三种不同的用法。一种数字,x的意思是“前面的字符或字符簇只浮现x次”;一种数字加逗号,x,的意思是“前面的内容出 现x或更多的次数”;两个用逗号分隔的数字,x,y表达“前面的内容至少浮现x次,但不超过y次”。我们可以把模式扩展到更多的单词或数字:a-zA-Z0-Array_1,$ /所有涉及一种以上的字母、数字或下划线的字符串 0-Array1,$ /所有的正数 -0,10-Array1,$ /所有的整数 -0,10-Array0,.0,10-Array0,$ /所有的小数

30、 最后一种例子不太好理解,是吗?这样看吧:与所有以一种可选的负号(-0,1)开头()、跟着0个或更多的数字(0-Array0,)、和一种 可选的小数点(.0,1)再跟上0个或多种数字(0-Array0,),并且没有其她任何东西($)。下面你将懂得可以使用的更为简朴的措施。特殊字符?与0,1是相等的,它们都代表着:“0个或1个前面的内容”或“前面的内容是可选的”。因此刚刚的例子可以简化为:-?0-Array0,.?0-Array0,$ 特殊字符*与0,是相等的,它们都代表着“0个或多种前面的内容”。最后,字符+与 1,是相等的,表达“1个或多种前面的内容”,因此上面的4个例子可以写成:a-zA-Z0-Array_+$ /所有涉及一种以上的字母、数字或下划线的字符串 0-Array+$ /所有的正数 -?0-Array+$ /所有的整数 -?0-Array*.?0-Array*$ /所有的小数 固然这并不能从技术上减少正规体现式的复杂性,但可以使它们更容易阅读。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!