易语言正则表达式简明教程

上传人:鲁** 文档编号:509017071 上传时间:2023-07-11 格式:DOCX 页数:10 大小:24.60KB
返回 下载 相关 举报
易语言正则表达式简明教程_第1页
第1页 / 共10页
易语言正则表达式简明教程_第2页
第2页 / 共10页
易语言正则表达式简明教程_第3页
第3页 / 共10页
易语言正则表达式简明教程_第4页
第4页 / 共10页
易语言正则表达式简明教程_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《易语言正则表达式简明教程》由会员分享,可在线阅读,更多相关《易语言正则表达式简明教程(10页珍藏版)》请在金锄头文库上搜索。

1、正贝 I表达式(regular expression)、,一 、前言 正贝表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝 对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正贝表达式 不是问题。索引1. _引子2. _正贝表达式的历史3. _正贝表达式定义3.1_普通字符3.2_非打印字符3.3_特殊字符3.4_限定符3.5_定位符3.6_选择3.7_后向引用4. _各种操作符的运算优先级5. _全部符号解释6. _部分例子7. _正贝表达式匹配规贝7.1_基本模式匹配7.2_字符簇7.3_确定重复出现1. 引子目前,正则表达式已经在很多软件中

2、得到广泛的应用,包括*nix (Linux, Unix等),HP 等操作系统, PHP, C#, Java 等开发环境,以及很多的应用软件中,都可以看到正贝表达式 的影子。正贝表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强 大,造成了正贝表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才 行,入门之后参照一定的参考,使用起来还是比较简单有效的。这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继 续阅读本文将让你也可以自由应用这样的代码。注意:这里的第7 部分跟前面的内容看起来似乎有些重复,目的是把前面表格里的部分 重新描述了一

3、次,目的是让这些内容更容易理解。2. 正则表达式的历史正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。 Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网 络。1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础 上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表 达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算

4、法的一些早期研究, Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文 本的编辑器和搜索工具中的一个重要部分。3. 正则表达式定义正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串 是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。列目录时,dir *. txt或ls *. txt中的*.txt就不是一个正则表达式,因为这里*与正则式 的*的含义是不同的。正则表达式是由普通字符

5、(例如字符a到z)以及特殊字符(称为元字符)组成的文字 模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。3.1 普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字 母字符,所有数字,所有标点符号以及一些符号。3.2 非打印字符字符 含义cx匹配由x指明的控制字符。例如,cM匹配一个Control-M或回车符。x的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 c 字符。f 匹配一个换页符。等价于 x0c 和 cL。n 匹配一个换行符。等价于 x0a 和 cJ。r 匹配一个回车符。等价于 x0d 和 cM。s 匹配任何空白

6、字符,包括空格、制表符、换页符等等。等价于 fnrtv。S匹配任何非空白字符。等价于fnrtv。t 匹配一个制表符。等价于 x09 和 cI。v 匹配一个垂直制表符。等价于 x0b 和 cK。3.3 特殊字符所谓特殊字符,就是一些有特殊含义的字符,如上面说的* txt中的*,简单的说就是 表示任何字符串的意思。如果要查找文件名中有的文件,则需要对进行转义,即在其前 加一个。ls *. txt。正则表达式有以下特殊字符。特别字符 说明$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 n或r。要匹配$字符本身,请使用$。() 标记一个子表达式

7、的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符, 请使用 ( 和 )。* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。.匹配除换行符n之外的任何单字符。要匹配,请使用。 标记一个中括号表达式的开始。要匹配 ,请使用 。? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, n 匹配字符 n。 n 匹配换行符。序列 匹配 ,而 ( 则匹配 (。匹配输入字符串的开始位置,除非在方括号表达式中使用

8、,此时它表示不接受该字符集合。 要匹配字符本身,请使用 标记限定符表达式的开始。要匹配 ,请使用 。| 指明两项之间的一个选择。要匹配 |,请使用 |。构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将 小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集 合、字符范围、字符间的选择或者所有这些组件的任意组合。3.4 限定符 限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或n或n,或n,m共6种。 *、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个? 就可以实现非贪婪或最小匹

9、配。正则表达式的限定符有:字符 描述*匹配前面的子表达式零次或多次。例如,Z0*能匹配z以及zoo。*等价于0,。+匹配前面的子表达式一次或多次。例如,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。

10、o1, 等价于 o+。 o0, 则等价于 o*。n,m m和n均为非负整数,其中n二m。最少匹配n次且最多匹配m次。例如,ol,3 将匹配fooooood中的前三个o。o0,l等价于o?。请注意在逗号和两个数之间不 能有空格。3.5 定位符用来描述字符串或单词的边界,和$分别指字符串的开始与结束,b描述单词的前或后 边界, B 表示非单词边界。不能对定位符使用限定符。3.6 选择 用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。其中?:是非捕获元之一,还有两个非捕获元是?=和?!,这两个还有更多

11、的含义,前者为 正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负 向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。3.7 后向引用 对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子 匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。可以使用非捕获元字符 ?:, ?=, or ?! 来忽略对相关匹配的保存。4. 各种操作符的运算优先级 相同优先

12、级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从 高到低如下:操作符 描述 转义符(), (?:), (?=), 圆括号和方括号*, +, ?, n, n, n,m 限定符,$, anyme tacharac ter 位置和顺序| “或”操作5. 全部符号解释字符 描述 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制 转义符。例如,n匹配字符nn匹配一个换行符。序列匹配而(则 匹配 (。匹配输入字符串的开始位置。如果设置了 RegExp对象的Multiline属性,也匹配 n 或 r 之后的位置。$ 匹配输入字符串的结束位置。如果设置了 Re

13、gExp 对象的 Multiline 属性, $ 也匹配 n 或 r 之前的位置。* 匹配前面的子表达式零次或多次。例如, zo* 能匹配 z 以及 zoo。* 等价于0,。 +匹配前面的子表达式一次或多次。例如,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

14、 中的 o ,但 能匹配 foooood 中的所有 o。 o1, 等价于 o+。 o0, 则等价于 o*。n,m m和n均为非负整数,其中n二m。最少匹配n次且最多匹配m次。例如,o1,3 将匹配fooooood中的前三个0。o0,1等价于o?。请注意在逗号和两个数之间不 能有空格。? 当该字符紧跟在任何一个其他限制符 (*, +, ?, n, n, n,m) 后面时,匹配模式 是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的 匹配所搜索的字符串。例如,对于字符串oooo,o+?将匹配单个o,而o+将匹配 所有 o 。. 匹配除 n 之外的任何单个字符。要匹配包括 n 在内的任何字符,请使用象 .n 的模式。(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得 到,在 VBScript 中使用 SubMatches 集合,在 JScript 中则使用 $0$9 属性。要匹配圆 括号字符,请使用 ( 或 )。(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存 储供以后使用。这在使用 或 字符 (|) 来组合一个模式的各个部分是很有用。例如, indus

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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