正则表达式(regular expression) (2)

  结构正则表达式的要领和建设数学表达式的要领一样。也就是用多种元字符与操纵符将小的表达式团结在一起来建设更大的表达式。正则表达式的组件可以是单个的字符、字符荟萃、字符范畴、字符间的选择可能所有这些组件的任意组合。

 

3.4 限定符   限定符用来指定正则表达式的一个给定组件必需要呈现几多次才气满意匹配。有*或+或?或{n}或{n,}或{n,m}共6种。
*、+和?限定符都是贪婪的,因为它们会尽大概多的匹配文字,只有在它们的后头加上一个?就可以实现非贪婪或最小匹配。
  正则表达式的限定符有:
  字符 描写
*   匹配前面的子表达式零次或多次。譬喻,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。  
+   匹配前面的子表达式一次或多次。譬喻,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。  
?   匹配前面的子表达式零次或一次。譬喻,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。  
{n}   n 是一个非负整数。匹配确定的 n 次。譬喻,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的两个 o。  
{n,}   n 是一个非负整数。至少匹配n 次。譬喻,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。  
{n,m}   m 和 n 均为非负整数,个中n <= m。最少匹配 n 次且最多匹配 m 次。譬喻,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请留意在逗号和两个数之间不能有空格。  
3.5 定位符   用来描写字符串或单词的界线,^和$别离指字符串的开始与竣事,/b描写单词的前或后界线,/B暗示非单词界线。不能对定位符利用限定符。 3.6 选择   用圆括号将所有选择项括起来,相邻的选择项之间用|脱离。但用圆括号会有一个副浸染,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副浸染。
  个中?:长短捕捉元之一,尚有两个非捕捉元是?=和?!,这两个尚有更多的寄义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。 3.7 后向引用   对一个正则表达式模式或部门模式双方添加圆括号将导致相关匹配存储到一个姑且缓冲区中,所捕捉的每个子匹配都凭据在正则表达式模式中从左至右所碰着的内容存储。存储子匹配的缓冲区编号从 1 开始,持续编号直至最大 99 个子表达式。每个缓冲区都可以利用 '/n' 会见,个中 n 为一个标识特定缓冲区的一位或两位十进制数。
  可以利用非捕捉元字符 '?:', '?=', or '?!' 来忽略对相关匹配的生存。 4. 各类操纵符的运算优先级   沟通优先级的从左到右举办运算,差异优先级的运算先高后低。各类操纵符的优先级从高到低如下:
  操纵符 描写
/   转义符  
(), (?:), (?=), []   圆括号和方括号  
*, +, ?, {n}, {n,}, {n,m}   限定符  
^, $, /anymetacharacter   位置温顺序  
|   “或”操纵  
5. 全部标记表明 字符 描写
/   将下一个字符标志为一个非凡字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。譬喻,'n' 匹配字符 "n"。'/n' 匹配一个换行符。序列 '//' 匹配 "/" 而 "/(" 则匹配 "("。  
^   匹配输入字符串的开始位置。假如配置了 RegExp 工具的 Multiline 属性,^ 也匹配 '/n' 或 '/r' 之后的位置。  
$   匹配输入字符串的竣事位置。假如配置了RegExp 工具的 Multiline 属性,$ 也匹配 '/n' 或 '/r' 之前的位置。  
*   匹配前面的子表达式零次或多次。譬喻,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。  
+   匹配前面的子表达式一次或多次。譬喻,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。  
?   匹配前面的子表达式零次或一次。譬喻,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。  
{n}   n 是一个非负整数。匹配确定的 n 次。譬喻,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的两个 o。  
{n,}   n 是一个非负整数。至少匹配n 次。譬喻,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。  
{n,m}   m 和 n 均为非负整数,个中n <= m。最少匹配 n 次且最多匹配 m 次。譬喻,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请留意在逗号和两个数之间不能有空格。  
?   当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后头时,匹配模式长短贪婪的。非贪婪模式尽大概少的匹配所搜索的字符串,而默认的贪婪模式则尽大概多的匹配所搜索的字符串。譬喻,对付字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。  
.   匹配除 "/n" 之外的任何单个字符。要匹配包罗 '/n' 在内的任何字符,请利用象 '[./n]' 的模式。  
(pattern)   匹配 pattern 并获取这一匹配。所获取的匹配可以从发生的 Matches 荟萃获得,在VBScript 中利用 SubMatches 荟萃,在JScript 中则利用 $0…$9 属性。要匹配圆括号字符,请利用 '/(' 或 '/)'。  
(?:pattern)   匹配 pattern 但不获取匹配功效,也就是说这是一个非获取匹配,不举办存储供今后利用。这在利用 "或" 字符 (|) 来组合一个模式的各个部门是很有用。譬喻, 'industr(?:y|ies) 就是一个比 'industry|industries' 更大略的表达式。  
(?=pattern)   正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供今后利用。譬喻,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不用耗字符,也就是说,在一个匹配产生后,在最后一次匹配之后当即开始下一次匹配的搜索,而不是从包括预查的字符之后开始。  
(?!pattern)   负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供今后利用。譬喻'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不用耗字符,也就是说,在一个匹配产生后,在最后一次匹配之后当即开始下一次匹配的搜索,而不是从包括预查的字符之后开始  
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]   负值字符范畴。匹配任何不在指定范畴内的任意字符。譬喻,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范畴内的任意字符。  
/b   匹配一个单词界线,也就是指单词和空格间的位置。譬喻, 'er/b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。  
/B   匹配非单词界线。'er/B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。  
/cx   匹配由 x 指明的节制字符。譬喻, /cM 匹配一个 Control-M 或回车符。x 的值必需为 A-Z 或 a-z 之一。不然,将 c 视为一个原义的 'c' 字符。  
/d   匹配一个数字字符。等价于 [0-9]。  
/D   匹配一个非数字字符。等价于 [^0-9]。  
/f   匹配一个换页符。等价于 /x0c 和 /cL。  
/n   匹配一个换行符。等价于 /x0a 和 /cJ。  
/r   匹配一个回车符。等价于 /x0d 和 /cM。  
/s   匹配任何空缺字符,包罗空格、制表符、换页符等等。等价于 [ /f/n/r/t/v]。  
/S   匹配任何非空缺字符。等价于 [^ /f/n/r/t/v]。  
/t   匹配一个制表符。等价于 /x09 和 /cI。  
/v   匹配一个垂直制表符。等价于 /x0b 和 /cK。  
/w   匹配包罗下划线的任何单词字符。等价于'[A-Za-z0-9_]'。  
/W   匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。  
/xn   匹配 n,个中 n 为十六进制转义值。十六进制转义值必需为确定的两个数字长。譬喻,'/x41' 匹配 "A"。'/x041' 则等价于 '/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-7),则 /nm 将匹配八进制转义值 nm。  
/nml   假如 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。  
/un   匹配 n,个中 n 是一个用四个十六进制数字暗示的 Unicode 字符。譬喻, /u00A9 匹配版权标记 (?)。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8644.html