正则表达式中的特殊字符

上传人:宝路 文档编号:18091327 上传时间:2017-11-13 格式:DOCX 页数:61 大小:47.77KB
返回 下载 相关 举报
正则表达式中的特殊字符_第1页
第1页 / 共61页
正则表达式中的特殊字符_第2页
第2页 / 共61页
正则表达式中的特殊字符_第3页
第3页 / 共61页
正则表达式中的特殊字符_第4页
第4页 / 共61页
正则表达式中的特殊字符_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《正则表达式中的特殊字符》由会员分享,可在线阅读,更多相关《正则表达式中的特殊字符(61页珍藏版)》请在金锄头文库上搜索。

1、正则表达式中的特殊字符 字符 含意 做为转意,即通常在后面的字符不按原来意义解释,如/b/匹配字符b,当 b 前面加了反斜杆后/b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如*匹配它前面元字符 0 次或多次,/a*/将匹配 a,aa,aaa,加了后,/a*/将只匹配a*。 匹配一个输入或一行的开头,/a/匹配an A,而不匹配An a $ 匹配一个输入或一行的结尾,/a$/匹配An a,而不匹配an A * 匹配前面元字符 0 次或多次,/ba*/将匹配 b,ba,baa,baaa + 匹配前面元字符 1 次或多次,/ba*/将匹配 ba,baa,baaa ? 匹配前

2、面元字符 0 次或 1 次,/ba*/将匹配 b,ba (x) 匹配 x 保存 x 在名为$1.$9 的变量中 x|y 匹配 x 或 y n 精确匹配 n 次 n, 匹配 n 次以上 n,m 匹配 n-m 次 xyz 字符集(character set),匹配这个集合中的任一一个字符(或元字符) xyz 不匹配这个集合中的任何一个字符 b 匹配一个退格符 b 匹配一个单词的边界 B 匹配一个单词的非边界 cX 这儿,X 是一个控制符,/cM/匹配 Ctrl-M d 匹配一个字数字符,/d/ = /0-9/ D 匹配一个非字数字符,/D/ = /0-9/ n 匹配一个换行符 r 匹配一个回车符

3、s 匹配一个空白字符,包括n,r,f,t,v 等 S 匹配一个非空白字符,等于/nfrtv/ t 匹配一个制表符 v 匹配一个重直制表符 w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如w匹配$5.98中的 5,等于a-zA-Z0-9 W 匹配一个不可以组成单词的字符,如W匹配$5.98中的$,等于a-zA-Z0-9。用 re = new RegExp(pattern,flags) 的方式比较好 pattern : 正则表达式 flags: g (全文查找出现的所有 pattern) i (忽略大小写) m (多行查找) vaScript 动态正

4、则表达式问题 请问正则表达式可以动态生成吗? 例如 JavaScript 中: var str = strTemp; 要生成: var re = /strTemp/; 如果是字符连接: var re = / + str + /即可 但是要生成表达式,可以实现吗?怎样实现? 正则表达式是一个描述字符模式的对象。 JavaScript 的 RegExp 对象和 String 对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在 JavaScript 中,正则表达式是由一个 RegExp 对象表示的.当然,可以使用一个 RegExp()构造函数来创建 RegExp 对象, 也

5、可以用 JavaScript 1.2 中的新添加的一个特殊语法来创建 RegExp 对象.就像字符串直接量被定义为包含在引号内的字符一样, 正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript 可能会包含如下的代码: var pattern = /s$/; 这行代码创建一个新的 RegExp 对象,并将它赋给变量 parttern.这个特殊的 RegExp 对象和所有以字母s结尾的字符串都匹配.用 RegExp()也可以定义一个等价的正则表达式,代码如下: var pattern = new RegExp(s$); 无论是用正则表达式直接量还是用构造函数 Reg

6、Exp(),创建一个 RegExp 对象都是比较容易的.较为困难的任务是用正则表达式语法来描述字符的模式. JavaScript 采用的是 Perl 语言正则表达式语法的一个相当完整的子集. 正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/就和所有包含子串 java 的字符串相匹配.虽然正则表达式中的其它字符不是按照字面意思进行匹配的,但它们都具有特殊的意义.正则表达式 /s$/ 包含两个字符. 第一个特殊字符 s 是按照字面意思与自身相匹配.第二个字符 $ 是一个特殊字符,它所匹配的是字符串的结

7、尾.所以正则表达式 /s$/ 匹配的就是以字母 s 结尾的字符串. 1.直接量字符 我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript 的正则表达式还通过以反斜杠()开头的转义序列支持某些非字母字符.例如,序列 n 在字符串中匹配的是一个直接量换行符.在正则表达式中,许多标点符号都有特殊的含义.下面是这些字符和它们的含义: 正则表达式的直接量字符 字符 匹配 _ 字母数字字符 自身 f 换页符 n 换行符 r 回车 t 制表符 v 垂直制表符 / 一个 / 直接量 一个 直接量 . 一个 . 直接量 * 一个 * 直接量 + 一个 + 直接量

8、 ? 一个 ? 直接量 | 一个 | 直接量 ( 一个 ( 直接量 ) 一个 ) 直接量 一个 直接量 一个 直接量 一个 直接量 一个 直接量 XXX 由十进制数 XXX 指 定的 ASCII 码字符 Xnn 由十六进制数 nn 指定的 ASCII 码字符 cX 控制字符X. 例如, cI 等价于 t, cJ 等价于 n _ 如果想在正则表达式中使用特殊的标点符号,必须在它们之前加上一个 . 2.字符类 将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式 / abc / 和字母 a , b , c 中的任何一个都匹配.另外还可以定义否定字符

9、类,这些类匹配的是除那些包含在中括号之内的字符外的所有字符.定义否定字符尖时,要将一个 符号作为从左中括号算起的第一个字符.正则表达式的集合是 / a-zA-z0-9 / . 由于某些字符类非常常用,所以 JavaScript 的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如, s 匹配的是空格符,制表符和其它空白符, s 匹配的则是空白符之外的任何字符. 正则表灰式的字符类 字符 匹配 _ . 位于括号之内的任意字符 . 不在括号之中的任意字符 . 除了换行符之外的任意字符,等价于n w 任何单字字符, 等价于a-zA-Z0-9 W 任何非单字字符,等价于a-zA-Z0-9

10、 s 任何空白符,等价于 t n r f v S 任何非空白符,等价于 t n r f v d 任何数字,等价于0-9 D 除了数字之外的任何字符,等价于0-9 b 一个退格直接量(特例) _ 3.复制 用以上的正则表式的语法,可以把两位数描述成 / d d /,把四位数描述成 / d d d d /.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数. 指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用

11、于表示它们.例如: +号匹配的就是复制前一模式一次或多次的模式.下面的表列出了复制语法.先看一个例子: /d2, 4/ /匹配 2 到 4 间的数字. /w3 d?/ /匹配三个单字字符和一个任意的数字. /s+javas+/ /匹配字符串java ,并且该串前后可以有一个或多个空格. / * / /匹配零个或多个非引号字符. 正则表达式的复制字符 字符 含义 _ n, m 匹配前一项至少 n 次,但是不能超过 m 次 n, 匹配前一项 n 次,或者多次 n 匹配前一项恰好 n 次 ? 匹配前一项 0 次或 1 次,也就是说前一项是可选的. 等价于 0, 1 + 匹配前一项 1 次或多次,等价

12、于1, * 匹配前一项 0 次或多次.等价于0, _ 4.选择,分组和引用 正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串 ab,或者是字符串 cd,又或者 ef. /d3|a-z4/ 匹配的是要么是一个三位数,要么是四个小写字母.在正则表达式中括号具有几种作用.它的主要作用是把单独的项目分组成子表达式,以便可以像处理一个独立的单元那种用 *、+或? 来处理那些项目.例如: /java(script) ?/ 匹配的是字符串 java,其后既可以有 script,也可以没有. /(ab|cd

13、) + |ef) / 匹配的既可以是字符串 ef,也可以是字符串ab 或者 cd 的一次或多次重复. 在正则表达式中,括号的第二个用途是在完整的模式中定义子模式。当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式 / a-z + d+/.但是由于假定我们真正关心的是每个匹配尾部的数字,那么如果我们将模式的数字部分放在括号中 (/ a-z + (d+)/) ,我们就可以从所检索到的任何匹配中抽取数字了,之后我们会对此进行解析的.代括号的子表达式的另一个用途是,允许我们

14、在同一正则表达式的后面引用前面的子表达式.这是通过在字符串 后加一位或多位数字来实现的.数字指的是代括号的子表达式在正则表达式中的位置.例如: 1 引用的是第一个代括号的子表达式. 3 引用的是第三个代括号的子表达式.注意,由于子表达式可以嵌套在其它子表达式中, 所以它的位置是被计数的左括号的位置. 例如:在下面的正则表达式被指定为 2: /(Jjava(Sscript) sis s (funw*) / 对正则表达式中前一子表达式的引用所指定的并不是那个子表达式的模式,而是与那个模式相匹配的文本.这样,引用就不只是帮助你输入正则表达式的重复部分的快 捷方式了,它还实施了一条规约,那就是一个字符串各个分离的部分包含的是完全相同的字符.例如:下面的正则表达式匹配的就是位于单引号或双引号之内的所有字符.但是,它要求开始和结束的引号匹配(例如两个都是双引号或者都是单引号):

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

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

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