正则表达式和自定义替换

上传人:宝路 文档编号:23762786 上传时间:2017-12-03 格式:DOCX 页数:39 大小:225.57KB
返回 下载 相关 举报
正则表达式和自定义替换_第1页
第1页 / 共39页
正则表达式和自定义替换_第2页
第2页 / 共39页
正则表达式和自定义替换_第3页
第3页 / 共39页
正则表达式和自定义替换_第4页
第4页 / 共39页
正则表达式和自定义替换_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《正则表达式和自定义替换》由会员分享,可在线阅读,更多相关《正则表达式和自定义替换(39页珍藏版)》请在金锄头文库上搜索。

1、1正则表达式和自定义替换目 录版权信息1. 概述2. 正则表达式的构成2.1特殊符号2.2通配符2.3字符集2.4子表达式2.5重复指示符3. 替换表达式4. 自定义替换表功能4.1 在查找替换中使用自定义替换表5. 应用举例(一)5.1 应用举例(二)5.2 应用举例(三)一 概述 从 4.5 版起,TextPro 在查找/替换中支持正则表达式。正则表达式是一种非常强大的搜索功能,通过与 TextPro 的其它功能相结合,可以方便地实现许多复杂的文本处理工作。 正则表达式原本是形式语言理论中的概念,与编译器的构造有密切的联系。但是作为一个应用软件的用户,我们没有必要去细究正则表达式的严格定义

2、和处理方法。本文将从实用的角度出发,阐述在2TextPro 中引入正则表达式的目的、正则表达式的命令格式,以及如何利用正则表达式完成一些实际的文本处理工作。 我们在处理文本时,经常会遇到一些具有某种特定格式,或者说满足某种规则的文本。比如,一个无符号的整数由一连串的数字构成,而一个 Email 地址的格式则是“用户名 主机名” ,其中用户名是一串字母或数字,主机名则是由若干个由“.”分隔的字母数字串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串” 。二 正则表达式的构成 为了方便理解,让我们先来看看大家比较熟悉的数学表达式,“

3、(x+3)*2+y”是一个典型的数学表达式。一个数学表达式由若干个“项”组成, “项”与“项”之间用加号或减号相连;这里“(x+3)*2”和“y”分别是两个项。每个项又由若干个“因子”组成,因子之间用乘号或除号相连;这里第一个项有两个因子“(x+3)”和“2” ,而第二个项只有一个因子“y” 。每个因子可以是一个简单的数,一个代数变量,也可以是放在括号里面的另一个表达式。对于最后一种情况,括号中的表达式称为“子表达式” ;这里“x+3 ”就是一个子表达式。 正则表达式的结构与数学表达式很相似。与数学表达式的“项”相对应,正则表达式由若干个“分支”构成, “分支”之间用符号“|”相连。从逻辑上讲

4、,分支之间是一种“或”的关系,一个字符串只要与正则表达式中的任何一个分支相匹配,这个字符串就与整个正则表达式相匹配。比如, “第三人称代词”可以用正则表达式表示为“他| 她| 它 |他们|她们 |它们” 。 与数学表达式的“因子”相对应,构成正则表达式“分支”的部件称为“原子” 。 “原子”与“原子”之间没有任何符号相连。从逻辑上讲,原子之间是串接的关系,一个字符串必须与各个原子依次相匹3配,才算与这个分支相匹配。比如在上面的例子中,分支“他们”由两个原子“他”和“们”组成。 正则表达式的本质是它的“原子”可以有多种不同的形式。前面的例子是最简单的情形,即每个原子由一个普通字符组成。除此以外,

5、“原子”还可以是特殊符号、通配符、字符集以及子表达式。2.1特殊符号可以作为特殊符号的原子有: 匹配行首。例如, “他”匹配出现在行首的“他”字。值得注意的是,这个符号仅仅表示“行首”这个位置,与它相匹配的字符串长度为 0;$ 匹配行末。与“”相似,它仅表示“行末”这个位置。例如, “。$”匹配出现在行末的句号; 匹配词尾。词尾是指紧接在字母数字或下划线之后的第一个非字母数字下划线,任一汉字之后也属于词尾。词尾的匹配长度也是 0; t TAB 字符;2.2通配符通配符是用一个符号(或几个符号组合) 来匹配某一类满足条件的字符。可以使用通配符来查找字符是正则表达式的一大特点。TextPro 支持

6、下列通配符( 注意大小写的区别):以半角为主的部分: .(句点 ) 匹配任意半角或全角字符; a 匹配任意英文字母; a 匹配除字母外的任意半角或全角字符; 4d 匹配任意数字; d 匹配除数字外的任意半角或全角字符; h 匹配任意词首字符 (字母及下划线) ; h 匹配除字母及下划线以外的任意字符; l 匹配任意小写字母; l 匹配除小写字母外的任意半角或全角字符; o 匹配任意八进制数字 (0-7); o 匹配除八进制数字外的任意字符; p 匹配任意半角标点符号(非空格、字母、数字的可打印 ASCII 字符); p 匹配除半角标点以外的任意半角或全角字符; s 匹配任意空白字符(半角空格、

7、TAB) ; s 匹配任意非空白的半角或全角字符; u 匹配任意大写字母; u 匹配除大写字母外的任意半角或全角字符; w 匹配可成词的字符(字母、数字及下划线); w 匹配成词字符 (字母、数字及下划线 )外的任意半角或全角字符; x 匹配任意十六进制数字 (0-9, a-f, A-F); x 匹配除十六进制数字外的任意半角或全角字符;以全角为主的部分: f 匹配除 ASCII 字符外的任意全角字符; f 匹配任意 ASCII 字符; A 匹配任意全角 ASCII 字符; b 匹配收录在 BIG5 码集中的任意字符; b 匹配未收录在 BIG5 码集中的任意字符; c 匹配任意汉字( 不包括

8、符号); c 匹配除汉字外的任意全角字符; 5D 匹配地支字符(子丑寅卯); g 匹配收录在 GBK 码集中的任意字符; g 匹配未收录在 GBK 码集中的任意字符; G 匹配大写希腊字母 j 匹配日文片假名 J 匹配日文平假名 k 匹配小写希腊字母 m 匹配数学符号; n 匹配中文数字 (一二三四) ; N 匹配大写中文数字(壹贰叁肆); P 匹配全角标点符号; r 匹配小写俄文字母; R 匹配大写俄文字母; S 匹配罗马数字,带点、括号或圆圈的序号( ); T 匹配天干字符(甲乙丙丁); V 匹配竖排标点符号; y 匹配拼音字符; Y 匹配注音字符; Z 匹配制表字符;2.3 字符集字符集

9、是用一对方括号括起来的字符串,用以匹配字符集中的任何一个字符。比如“ 他她它 ”匹配单数任一第三人称代词“他” 、“她”或“它” 。如果方括号中的第一个字符是,则匹配除指定字符外的任何其它字符。例如“ 我+$ ”匹配没有“ 我”字的整行,也可称为“查找不匹配的行” 。6分析:表示行首,我表示除“我”以外的任何字符,+ 表示多个这种匹配字符,$表示一直到行末。在字符集中,还可以用-表示字符的范围,例如“a-z”匹配任何小写字母。注意尽量不要用“-”表示汉字的范围,因为汉字并没有公认的次序,TextPro 目前是依据汉字的 Unicode 编码来确定范围的。如果两个汉字的编码相差很大,将消耗大量的

10、内存,运算也将非常缓慢。为了避免这种现象,TextPro 中限制表示范围的起始与终止汉字必须位于 Unicode 编码的同一行(row) 。如果字符集要包括字符“” 、 “”、 “-”或“ ”,可以在这些字符前加“” 。例如“xyz”匹配, x,y或z。另外需要特别指出的是,前面所述的特殊字符及通配符,除了t和 e外,在字符集中均作为普通字符处理。 字符集的匹配速度比通配符慢,所以应该尽可能地使用通配符。例如要查找半角数字时,应该使用d ,而不要使用0-9 ,虽然后者也是正确的。2.4子表达式子表达式是指用一对括弧()括起来的另外一个正则表达式。使用子表达式有两种主要的目的。一是改变匹配的优先

11、级,例如“中|西文软件”匹配的是“中”或“西文软件” ,但是“(中|西) 文软件”匹配的是“中文软件”或“西文软件” 。 使用子表达式的另一个目的,是引用前面匹配到的内容。例如要查找形如“哈哈” 、 “嘻嘻”的叠字词,可以写“(c)1” 。这里“(c)”匹配任意汉字,而“1 ”则引用匹配到的内容。TextPro 允许在一个查找串包含最多 9 个子表达式,它们的匹配内容可以分别用“1 ”, “2”.“9”来加以引用。子表达式也可以嵌套另一个子表达式,子表达式左括号出现的序号为这个表达式的编号。7另外需要注意的是,只能引用已经匹配了的子表达式,象上面的例子不可以写成“1(c)” ,同理,也不应该引

12、用不同分支中的子表达式,因为一个正则表达式中只可能有一个分支被匹配。2.5重复指示符正则表达式的另外一个强大的功能是重复匹配的能力。前述的任何一种“原子”之后,都可以指定一个重复指示符。下面列出各种重复指示符:? 表示前一“原子”可有可无(重复 0 或 1 次)。例如 “我们? ”匹配 “我”或“ 我们” ; + 表示前一“原子”至少匹配一次。例如“d+”匹配任何一个无符号整数; * 表示前一“前子”重复匹配 0 或多次。例如“hw*”表示许多高级语言对“变量”的定义:以字母或下划线开头,后接任意多个字母数字或下划线; n 表示前一“原子”重复匹配 n 次。例如“c 啦3”匹配“哗啦啦啦”或“

13、呼啦啦啦”等; n,m 表示前一“原子”重复匹配 n 至 m 次,其中 nm,TextPro 将自动交换 m 与 n 的值; n, 至少重复匹配 n 次,相当于n,无穷大; ,m 至多重复匹配 m 次,相当于0,m ; 重复任意多次,相当于*。在前面所述的各种重复指示符中,如果重复的次数不定,TextPro将匹配尽可能长的目标串(但最多不超过 32767 次,这是 TextPro 内设定的上限) 。例如有一字符串“你好,我好,大家好” ,表达式“你.*好”将匹配整个字符串,而不是“你好”或“你好,我好” 。如果需要匹配尽可能短的目标串,可以采用前述的最后四种形式,并在“”之后加上“-” 号。上

14、例中的表达式如改为“你.-好” ,则匹配串为“你好” 。8-n,m 重复匹配 m 至 n 次,匹配次数尽可能少;-n, 至少重复匹配 n 次,匹配次数尽可能少;-,m 至多重复匹配 m 次,匹配次数尽可能少,相当于-0,m; - 重复任意多次,类似于 *,但匹配次数尽可能少。重复指示符只对紧邻在其前的“原子”起作用,例如“你好+ ”将匹配“你好” , “你好好”。但是不会匹配“你好你好” 。如果要重复匹配一组原子,可以使用括号(子表达式),如“(你好)+ ”就会匹配“你好你好” 。需要指出的是,重复指示符与引用子表达式具有不同的含义。重复指示符是重复“匹配” ,至于匹配的内容则可以不同;而引用子表达式则是重复匹配的内容。例如, “d2”可以匹配任何一个两位数的整数,但是“(d)1”只能匹配“11” 、 “22”、 “33”等数字相同两位数。当然,也可以重复引用子表达式,如“(d)1*”可以匹配“2” ,“33”、 “111”等各位数全同的整数。如前所述,在正则表达式中,以下字符“*?+.()”具有特殊的含义。如果需要查找这些字符本身,可以在该字符前加一个反斜杠“”。例如查“def”可以输入“

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

当前位置:首页 > 行业资料 > 其它行业文档

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