快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱乐App_蓝莲花网进入



选择与编组

选择容许应用 '|' 字符来在两个或多个候选项中进行选择。经由过程扩展章节标题的正则表达式,可以将其扩充为不仅仅适用于章节标题的表达式。不过,这可没有想象的那么直接。在应用选择时,将匹配'|' 字符每边最可能的表达式。你可能觉得下面的 JScript 和 VBScript 表达式将匹配位于一行的开始和停止位置且后跟一个或两个数字的 'Chapter' 或 'Section':

/^Chapter|Section [1-9][0-9]{0,1}$/ "^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;

不幸的是,真正的环境是上面所示的正则表达式要么匹配位于一行开始处的单词 'Chapter',要么匹配一行停止处的后跟任何数字的 'Section'。假如输入字符串为 'Chapter 22',上面的表达式将只匹配单词 'Chapter'。假如输入字符串为 'Section 22',则该表达式将匹配 'Section 22'。但这种结果不是我们此处的目的,是以必须有一种法子来使正则表达式对付所要做的更易于相应,而且确凿也有这种措施。

可以应用圆括号来限定选择的范围,也便是阐明确该选择只适用于这两个单词 'Chapter' 和 'Section'。不过,圆括号同样也是难处置惩罚的,由于它们也用来创建子表达式,有些内容将在后面关于子表达式的部分先容。经由过程采纳上面所示的正则表达式并在适当位置添加圆括号,就可以使该正则表达式既可以匹配 'Chapter 1',也可以匹配 'Section 3'。

下面的正则表达式应用圆括号将 'Chapter' 和 'Section' 组成一组,以是该表达式才能精确事情。对 JScript 为:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

对 VBScript 为:

"^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;

这些表达式事情精确,只是孕育发生了一个有趣的副产品。在 'Chapter|Section' 两边放置圆括号建立了适当的编组,但也导致两个待匹配单词之一都被捕获供往后应用。因为在上面所示的表达式中只有一组圆括号,是以只能有一个捕获的 submatch。可以应用 VBScript 的Submatches 聚拢或者JScript 中RegExp 工具的 $1-$9 属性来引用这个子匹配。

无意偶尔捕获一个子匹配是所盼望的,无意偶尔则是不盼望的。在阐明所示的示例中,真正想做的便是应用圆括号对单词 'Chapter' 或 'Section' 之间的选择编组。并不盼望在后面再引用该匹配。实际上,除非真的是必要捕获子匹配,否则请不要应用。因为不必要花光阴和内存来存储那些子匹配,这种正则表达式的效率将更高。

可以在正则表达式模式圆括号内部的前面应用 '?:'来防止存储该匹配供往后应用。对上面所指正则表达式的下述改动供给了免除子匹配存储的相同功能。对 JScript:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

对 VBScript:

"^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;

除了 '?:' 元字符,还有两个非捕获元字符用于称之为预查的匹配。一个为正向预查,用 ?= 表示, 在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串。一个为负向预查,用 '?!' 表示,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。

例如,假定有一个包孕引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文档。进一步假设必要更新该文档,措施是查找所有对 Windows 95、Windows 98 以及 Windows NT 的引用,并将这些引用变动为 Windows 2000。可以应用下面的 JScript 正则表达式,这是一个正向预查,来匹配 Windows 95、Windows 98 以及 Windows NT:

/Windows(?=95 |98 |NT )/

在 VBScript 要进行同样的匹配可以应用下述表达式:"Windows(?=95 |98 |NT )"

找到一个匹配后,紧接匹配到的翰墨(而不包括预查中应用的字符)就开始对下一次匹配的搜索。例如,假如上面所示的表达式匹配到 'Windows 98',则将从 'Windows' 而不是 '98' 之后继承查找。

后向引用

正则表达式一个最紧张的特点便是将匹配成功的模式的某部分进行存储供今后应用这一能力。请回顾一下,对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以应用非捕获元字符 '?:', '?=', or '?!' 来轻忽对这部分正则表达式的保存。

所捕获的每个子匹配都按照在正则表达式模式中从左至右所碰到的内容存储。存储子匹配的缓冲区编号从 1 开始,继续编号直至最大年夜 99 个子表达式。每个缓冲区都可以应用 '\n' 和记娱乐App造访,此中 n 为一个标识特定缓冲区的一位或两位十进制数。

后向引用一个最简单,最有用的利用是供给了确定翰墨中继续呈现两个相同单词的位置的能力。请看下面的句子:

Is is the cost of of gasoline going up up?

根据所写内容,上面的句子显着存在单词多次重复的问题。假如能有一种措施无需查找每个单词的重复征象就能改动该句子就好了。下面的 JScript 正则表达式应用一个子表达式就可以实现这一功能。

/\b([a-z]+) \1\b/gi

等价的 VBScri和记娱乐Apppt 表达式为:

"\b([a-z]+) \1\b"

在这个示例中,子表达式便是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符,即由'[a-z]+' 所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用,也便是由附加表达式所匹配的第二次呈现的单词。'\1'用来指定第一个子匹配。单词界限元字符确保只检测零丁的单词。假如不这样,则诸如 "is issued" 或 "this is" 这样的短语都邑被该表达式不精确地识别。

在 JScript 表达式中,正则表达式后面的全局标志 ('g') 表示该表达式将用来在输入字符串中查找尽可能多的匹配。大年夜小写敏感性由表达式停止处的大年夜小写敏感性标记 ('i') 指定。多行标记指定可能呈现在换行符的两真个潜在匹配。对 VBScript 而言,在表达式中不能设置各类标记,但必须应用 RegExp 工具的属性来显式设置。

应用上面所示的正则表达式,下面的 JScript 代码和记娱乐App可以应用子匹配信息,在一个翰墨字符串中将继续呈现两次的相同单词调换为一个相同的单词:

var ss = "Is is the cost of of gasoline going up up?.\n"; var re = /\b([a-z]+) \1\b/gim; //创建正则表达样子容貌外形式. var rv = ss.replace(re,"$1"); //用一个单词替代两个单词.

最靠近的等价VBScript 代码如下:

Dim ss, re, rv ss = "Is is the cost of of gasoline going up up?." & vbNewLine Set re = New RegExp re.Pattern = "和记娱乐App\b([a-z]+) 和记娱乐App\1\b" re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.WordStr(ss,"$1")

请留意在 VBScript 代码中,全局、大年夜小写敏感性以及多行标记都是应用 RegExp 工具的适当属性来设置的。

在replace 措施中应用 $1 来引用所保存的第一个子匹配。假如有多个子匹配,则可以用 $2, $3 等继承引用。

后向引用的另一个用途是将一个通用资本唆使符 (URI) 分化为组件部分。假定盼望将下述的URI 分化为协议 (ftp, http, etc),域名地址以及页面/路径:

http://msdn.microsoft.com:80/scripting/default.htm

下面的正则表达式可以供给这个功能。对 JScript,为:

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

对 VBScript 为:

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"

第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码,假如指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。着末,第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。

将该正则表达式利用于上面所示的 URI 后,子匹配包孕下述内容:

RegExp.$1 包孕 "http"

RegExp.$2 包孕 "msdn.microsoft.com"

RegExp.$3 包孕 ":80"

RegExp.$4 包孕 "/scripting/default.htm"

您可能还会对下面的文章感兴趣: