正则表达式 (C++)

一样、正则表达式语法

1.1 元素

要素得以是下列项有:

  • 貌似字符,可配合目标序列中的同一字符。

  • 通配符“.”,可匹配目标序列中除去换行符外的别字符。

  • “[expr]”形式之括号表达式,可匹配目标序列中已含在发表式 expr 定义集内的字符或排序规则元素;或者下“[^expr]”形式,可相当目标序列中不含在发表式 expr 定义集内的字符或排序规则元素。

    表达式 expr 可以涵盖下列项的自由组合:

    • 单个字符。将拖欠字符添加到 expr 定义的聚众。

    • ch1ch2”形式之字符值域。将闭值域
      [ch1ch2]
      所表示的字符添加到 expr 定义的聚合。

    • “[:name:]”形式之字符类。将命名类中之字符添加到 expr 定义的集聚。

    • “[=elt=]”形式之等价类。将等效于 elt 的排序规则元素添加到 expr 定义的集。

    • “[.elt.]”形式之排序规则符号。将排序规则元素 elt 添加到 expr 定义的联谊。

  • 定位点。定位点“^”可配合目标序列的起;定位点“$”可相当目标序列的终极。

“(
子表达式 )”形式的捕获组,或者以 BRE 和 grep 中的“\( 子表达式
\)”形式,可配合目标序列中以及分隔符之间的模式可的字符序列。

  • “\k”形式之标识转义,可相当目标序列中之字符 k

示例:

  • “a”可配合目标序列“a”,但未配合目标序列“B”、“b”或“c”。

  • “.”可相当有目标序列“a”、“B”、“b”和“c”。

  • “[b-z]”可相当目标序列“b”和“c”,但非匹配目标序列“a”或“B”。

  • “[:lower:]”可匹配目标序列“a”、“b”和“c”,但不匹配目标序列“B”。

  • “(a)”可相当目标序列“a”并以捕获组
    1 及子序列“a”相关联,但不配合目标序列“B”、“b”或“c”。

在 ECMAScriptBRE 和 grep 中,元素呢可以是“\dd”形式的向阳后引用,其中,dd 表示一个十上前制值,此值可相当目标序列中的某个平等配符序列,而拖欠队以及第
N 单捕获组所匹配的字符序列相同。例如,“(a)\1”可相当目标序列“aa”,因为第一单(而且是绝无仅有一个)捕获组可配合配初始序列“a”,然后
\1 可匹配最终序列“a”。

在 ECMAScript 中,元素得以是下列项之一:

  • “(?:
    子表达式 )”形式之非捕获组。可相当目标序列中与分隔符之间的模式可的字符序列。

  • “\f”、“\n”、“\r”、“\t”或“\v”形式的个别文件格式转义。它们各自匹配目标序列中之换页符、换行符、回车符、水平制表符和垂直制表符。

  • “(?=
    子表达式 )”形式之一定断言。可匹配目标序列中及分隔符之间的模式可的字符序列,但切莫见面转目标序列中之匹配岗位。

  • “(?!
    子表达式 )”形式之否定断言。可匹配目标序列中与分隔符之间的模式不符之任意字符序列,并无见面改变目标序列中之匹配岗位。

  • “\xhh”形式之十六进制转义序列。可相当目标序列中由于简单独十六进制数字 hh 表示的字符。

  • “\uhhhh”形式的
    unicode 转义序列。可相当目标序列中由于四只十六进制数字 hhhh 表示的字符。

  • “\ck”形式之控件转义序列。可相当由字符 k 命名的控制字符。

  • “\b”形式的字边界断言。当当对象序列中之当下职务紧跟在许边界之后经常,此断言即匹配。

  • “\B”形式的负字边界断言。当以目标序列中的手上位置并非紧跟以配边界之后常,此断言即匹配。

  • “\d”、“\D”、“\s”、“\S”、“\w”、“\W”形式之
    dsw 字符转义。为字符类提供一个短名称。

示例:

  • “(?:a)”可相当目标序列“a”,但“(?:a)\1”无效,因为无在捕获组
    1。

  • “(?=a)a”可匹配目标序列“a”。肯定断言可相当目标序列中的始序列“a”,并且正则表达式中最终之“a”可配合目标序列中的启序列“a”。

  • “(?!a)a”不般配目标序列“a”。

  • “a\b.”可配合目标序列“a~”,但非兼容目标序列“ab”。

  • “a\B.”可配合目标序列“ab”,但切莫匹配目标序列“a~”。

在 awk 中,元素得以是下列项之一:

  • “\\”、“\a”、“\b”、“\f”、“\n”、“\r”、“\t”或“\v”形式之文件格式转义。它们各自匹配目标序列中的反斜杠、警报符、退格符、换页符、换行符、回车符、水平制表符和垂直制表符。

  • “\ooo”形式之八进制转义序列。可配合目标序列中出于一个、两独或三个八进制数字 ooo 的价表示的字符。

1.2 重复

除此之外肯定断言、否定断言或者定位点之外的别因素都得以后接一个再计数。最常见的又计数采用“{min,max}”形式,或者在 BRE 和 grep 中采用“\{min,max\}”形式。后同这种还计数形式之素而至少匹配 min 次连续出现的同拖欠因素相符的阵,最多未超越 max 次。例如,“a{2,3}”可配合目标序列“aa”和目标序列“aaa”,但切莫配合目标序列“a”或目标序列“aaaa”。

重新计数也足以以以下形式之一:

  • “{min}”,或 BRE 和 grep 中的“\{min\}”。等效于“{min,min}”。

  • “{min,}”,或 BRE 和 grep 中的“\{min,\}”。等效于“{min,无限大}”。

  • “*”。等效于“{0,无限大}”。

示例:

  • “a{2}”可配合目标序列“aa”,但切莫兼容目标序列“a”或目标序列“aaa”。

  • “a{2,}”可相当目标序列“aa”、目标序列“aaa”,以此类推,但切莫般配目标序列“a”。

  • “a*”可匹配目标序列“”、目标序列“a”、目标序列“aa”,以此类推。

对于除 BRE 和 grep 外的装有语法,重复计数还可使以下形式有:

  • “?”。等效于“{0,1}”。

  • “+”。等效于“{1,无限大}”。

示例:

  • “a?”可相当目标序列“”和对象序列“a”,但未匹配目标序列“aa”。

  • “a+”可匹配目标序列“a”、目标序列“aa”,以此类推,但非匹配目标序列“”。

在 ECMAScript 中,所有形式之更计数都得以晚以及字符“?”,用于指定非贪婪重复。

1.3 串联

无是否后以及重复计数,正则表达式都可以拧联成较丰富之正则表达式。由此发出的表达式可相当由各自跟各个要素相符的队串联而成为的靶子序列。例如,“a{2,3}b”可匹配目标序列“aab”和对象序列“aaab”,但非兼容目标序列“ab”或目标序列“aaaab”。

1.4 替换

在除 BRE 和 grep 外的有着正则表达式语法中,串联正则表达式可后同字符“|”以及其它一个串联正则表达式。通过这种措施,可以组合任意数量的串联正则表达式。由此发出的表达式可匹配和一个要多单串联正则表达式相符的随意目标序列。

当多独串联正则表达式与对象序列匹配时,ECMAScript 会选择第一独同序列匹配的串联正则表达式作为匹配项(第一相当配);其他正则表达式语法将选择上至极丰富匹配的串联正则表达式。例如,“ab|cd”可相当目标序列“ab”和对象序列“cd”,但非兼容目标序列“abd”或目标序列“acd”。

在 grep 和 egrep 中,换行符(“\n”)可用来分隔分支组织。

1.5 子表达式

在 BRE 和 grep 中,子表达式是一样栽串联。在其他正则表达式语法中,子表达式是一律种植分支组织。

其次、语法摘要

下表汇总了各种正则表达式语法中可用的机能:

元素

BRE

ERE

ECMA

grep

egrep

awk

使用“|”的分支结构

 

+

+

 

+

+

使用“\n”的分支结构

     

+

+

 

定位点

+

+

+

+

+

+

后向引用

+

 

+

+

   

括号表达式

+

+

+

+

+

+

使用“()”的捕获组

 

+

+

 

+

+

使用“\(\)”的捕获组

+

   

+

   

控件转义序列

   

+

     

dsw 字符转义

   

+

     

文件格式转义

   

+

   

+

十六进制转义序列

   

+

     

标识转义

+

+

+

+

+

+

否定断言

   

+

     

否定字边界断言

   

+

     

非捕获组

   

+

     

非贪婪重复

   

+

     

八进制转义序列

         

+

普通字符

+

+

+

+

+

+

肯定断言

   

+

     

使用“{}”的重复

 

+

+

 

+

+

使用“\{\}”的重复

+

   

+

   

使用“*”的重复

+

+

+

+

+

+

使用“?”和“+”的重复

 

+

+

 

+

+

Unicode 转义序列

   

+

     

通配符

+

+

+

+

+

+

字边界断言

   

+

     

其三、语义详细信息

3.1 定位点

定位点可匹配目标字符串中之岗位,而休般配配字符。“^”可配合目标字符串的始发,而“$”可匹配目标字符串的结尾。

3.2 后朝引用

往后引用包含一个倒斜杠,后和十迈入制值
N。它可是相当第
N 个捕获组的始末。N
的价值不得越反斜杠之前的捕获组数量。在 BRE 和 grep 中,N
的值由反斜杠之后的十进制数字操纵。在 ECMAScript 中,N
的值由紧跟以倒斜杠之后的有着十进制数字操纵。因此,在 BRE 和 grep 中,N
的值绝不见面越 9(即使正则表达式具有九单以上捕获组)。在 ECMAScript 中,N
的价是不过的。

示例:

  • “((a+)(b+))(c+)\3”可相当目标序列“aabbbcbbb”。向后引用“\3”可相当第三独捕获组中的公文,即“(b+)”。它不般配目标序列“aabbbcbb”。

  • “(a)\2”无效。

  • “(b(((((((((a))))))))))\10”在 BRE 和 ECMAScript 中兼有不同之义。在 BRE 中,向后引用为“\1”。向后引用可配合第一独捕获组的情(即分别坐“(b”开头和末段一个“)”末尾且位于望后引用前的捕获组),最后之“0”可相当普通字符“0”。在 ECMAScript 中,向后引用为“\10”。它只是相当第十只捕获组,即无限中间的捕获组。

3.3 括声泪俱下表达式

括号表达式用于定义一个字符和排序规则元素集合。当括号表达式以字符“^”开头时,如果凑中从来不元素和对象序列中之此时此刻字符匹配,即意味着相当成功。其他情况下,如果凑的任意元素与目标序列中的眼前字符匹配,即表示相当成功。

字符集可以由此列出单个字符、字符值域、字符类、等价类和排序规则符号的肆意组合来定义。

3.4 捕获组

捕获组用于将那个内容标记为正则表达式语法中之一个单元,并对准与该情交互兼容的对象文本设置标签。与每个捕获组相关联的签是一个数字,此数字由用于标记捕获组的左括声泪俱下计数来支配,一直计数到(包括)用于标记当前捕获组的左括号。在斯实现中,最特别捕获组数量也
31。

示例:

  • “ab+”可相当目标序列“abb”,但非般配目标序列“abab”。

  • “(ab)+”不配合目标序列“abb”,但唯独匹配目标序列“abab”。

  • “((a+)(b+))(c+)”可配合目标序列“aabbbc”并拿捕获组
    1 暨子序列“aabbb”相关联,将捕获组 2 及子序列“aa”相关联,将捕获组 3
    与“bbb”相关联,并将捕获组 4 同子序列“c”相关联。

3.5 字符类

括号表达式中的字符类用于将命名类中之有着字符都抬高到括号表达式所定义之字符集。若一旦创建字符类,请用“[:”,后同字符类的称呼,然后还和“:]”。在内部,字符类名称通过调用 id = traits.lookup_classname 来辨别。如果 traits.isctype(ch, id) 返回 TRUE,则字符 ch 属于这样的近乎。默认的 regex_traits 模板支持下表中之类似名称。

类名

说明

“alnum”

小写字母、大写字母和数字

“alpha”

小写字母和大写字母

“blank”

空格或制表符

“cntrl”

文件格式转义字符

“digit”

数字

“graph”

小写字母、大写字母、数字和标点

“lower”

小写字母

“print”

小写字母、大写字母、数字、标点和空格

“punct”

标点

“space”

space

“upper”

大写字符

“xdigit”

数字、“a”、“b”、“c”、“d”、“e”、“f”、“A”、“B”、“C”、“D”、“E”、“F”

"d"

与 digit 相同

“s”

与 space 相同

“w”

与 alnum 相同

3.6 字符范围

括号表达式中之字符值域用于将值域内的保有字符都长到括号表达式所定义的字符集。若要开创字符值域,请用字符“-”放在值域内第一独和最后一个字符中。这样可以将超或等于第一单字符的数值、小于或顶最后一个字符的数值的有所字符都居集合内。请小心,这同样填补加的字符集取决于平台特定的字符表示法。如果字符“-”位于括号表达式的开始或最后,或者是字符值域的第一个或最后一个字符,则它表示该自身。

示例:

  • “[0-7]”表示字符集
    { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’ }。它可是匹配目标序列“0”、“1”,以此类推,但无兼容“a”。

  • 每当利用
    ASCII 字符编码的体系上,“[h-k]”表示字符集 { ‘h’, ‘i’, ‘j’, ‘k’
    }。它可配合目标序列“h”、“i”,以此类推,但不兼容“\x8A”或“0”。

  • 于以
    EBCDIC 字符编码的系统及,“[h-k]”表示字符集 { ‘h’, ‘i’, ‘\x8A’,
    ‘\x8B’, ‘\x8C’, ‘\x8D’, ‘\x8E’, ‘\x8F’, ‘\x90’, ‘j’, ‘k’
    }(’h’ 编码为 0x88,而 ‘k’ 编码为 0x92)。它不过配合目标序列“h”、“i”、“\x8A”,以此类推,但切莫般配“0”。

  • “[-0-24]”表示字符集
    { ‘-‘, ‘0’, ‘1’, ‘2’, ‘4’ }。

  • “[0-2-]”表示字符集
    { ‘0’, ‘1’, ‘2’, ‘-‘ }。

  • 每当以
    ASCII 字符编码的体系上,“[+–]”表示字符集 { ‘+’, ‘,’, ‘-‘
    }。

但是,当用分别区域设置的值域时,值域内的字符由区域安装的排序规则来决定。排在值域定义第一独字符之后、值域定义最后一个字符之前的字符在集中。这片只端字符也坐落集中。

3.7 排列规则元素

排序规则元素是一个当做单个字符来处理的多字符序列。

3.8 排列规则符号

括号表达式中的排序规则符号用于将排序规则元素添加到括号表达式所定义之聚集。若要开创排序规则符号,请动“[.”,后以及排序规则元素,然后又和“.]”。

3.9 控件转义序列

控件转义序列包含一个反而斜杠,后同字母“c”,然后又与“a”到“z”(或“A”到“Z”)之间的一个字母。它可是匹配由该字母命名的
ASCII 控制字符。例如,“\ci”可配合目标序列“\x09”,因为
<ctrl-i> 的值为 0x09。

3.10 DSW字符转义

如下表所示,dsw
字符转义是字符类的少名称。

转义序列

等效命名类

默认命名类

“\d”

“[[:d:]]”

“[[:digit:]]”

“\D”

“[^[:d:]]”

“[^[:digit:]]”

“\s”

“[[:s:]]”

“[[:space:]]”

“\S”

“[^[:s:]]”

“[^[:space:]]”

“\w”

“[[:w:]]”

“[a-zA-Z0-9_]”*

“\W”

“[^[:w:]]”

“[^a-zA-Z0-9_]”*

*ASCII 字符集

3.11 等价类

括号表达式中的等价类用于将同等价类定义着之排序规则元素等效的有所字符和排序规则元素全部丰富到括号表达式所定义之联谊。若要创建等价类,请以“[=”,后及排序规则元素,然后再同“=]”。在内部,如果 traits.transform_primary(elt1.begin(), elt1.end()) ==
traits.transform_primary(elt2.begin(),
elt2.end()),则少单排序规则元素 elt1 和 elt2 均等。

3.12 文件格式转义

文件格式转义包括广大的 C
语言字符转义序列:“\\”、“\a”、“\b”、“\f”、“\n”、“\r”、“\t”、“\v”。它们有大规模的意义,分别代表反斜杠、警报符、退格符、换页符、换行符、回车符、水平制表符和垂直制表符。在 ECMAScript 中,不允许以“\a”和“\b”。(允许采取“\\”,但它们是平等栽标识转义,而非是一模一样种文件格式转义)。

3.13 十六进制转义序列

十六进制转义序列包含一个反倒斜杠,后及字母“x”,然后再跟两个十六进制数字
(0-9a-fA-F)。它可是匹配目标序列中及当时点儿个数字所指定的价当的字符。例如,当以
ASCII 字符编码时,“\x41”可配合目标序列“A”。

3.14 标识转义

标识转义包含一个倒斜杠,后以及单个字符。它只是配合该字符。当字符具有非同寻常意义时,需要使用它;通过使用标识转义,可以破该殊含义。例如:

  • “a*”可相当目标序列“aaa”,但未兼容目标序列“a*”。

  • “a\*”不般配目标序列“aaa”,但不过配合目标序列“a*”。

正如表所示,标识转义中允许采取的字符集取决于正则表达式语法。

语法

允许使用的标识转义字符

BREgrep

{ ‘(‘, ‘)’, ‘{‘, ‘}’, ‘.’, ‘[‘, ‘\’, ‘*’, ‘^’, ‘$’ }

EREegre

{ ‘(‘, ‘)’, ‘{‘, ‘.’, ‘[‘, ‘\’, ‘*’, ‘^’, ‘$’, ‘+’, ‘?’, ‘|’ }

awk

ERE 加 { ‘"’, ‘/’ }

ECMAScript

除可能构成标识符的字符以外的所有字符。通常,这包括字母、数字、“$”、“_”和 unicode 转义序列。有关详细信息,请参阅 ECMAScript 语言规范。

3.15 单个字符

括号表达式中的么字符用于将拖欠字符添加到括号表达式所定义的字符集。当在括号表达式中除去开头外的人身自由ECMAScript位置时,“^”表示该自我。

示例:

  • “[abc]”可相当目标序列“a”、“b”和“c”,但非匹配配序列“d”。

  • “[^abc]”可匹配目标序列“d”,但不般配目标序列“a”、“b”或“c”。

  • “[a^bc]”可配合目标序列“a”、“b”、“c”和“^”,但切莫般配目标序列“d”。

在除 ECMAScript 外的外正则表达式语法中,如果“]”紧跟以左括号“[”之后还是紧跟第一只“^”之后,则该字符表示该自我。

示例:

  • “[]a”无效,因为无“]”来终止括号表达式。

  • “[]abc]”可匹配目标序列“a”、“b”、“c”和“]”,但无匹配目标序列“d”。

  • “[^]abc]”可相当目标序列“d”,但不般配目标序列“a”、“b”、“c”或“]”。

在 ECMAScript 中,请以括号表达式中采用“\]”来表示字符“]”。

示例:

  • “[]a”可相当目标序列“a”,因为括号表达式为空。

  • “[\]abc]”可相当目标序列“a”、“b”、“c”和“]”,但不配合目标序列“d”。

3.16 否定断言

否定断言可匹配除其情节外之任意项。它不占目标序列中之另字符。例如,“(?!aa)(a*)”可相当目标序列“a”并将捕获组
1 和子序列“a”相关联。它不配合目标序列“aa”或目标序列“aaa”。

3.17 否定字边界断言

设若目标字符串中的即岗位并非紧跟以配边界之后,则否认字边界断言匹配。

3.18 非捕获组

非捕获组用于将该情节标记为正则表达式语法中的一个单元,但未会见针对目标文本设置标签。例如,“(a)(?:b)*(c)”可配合目标文本“abbc”,并将捕获组
1 跟子序列“a”相关联,将捕获组 2 及子序列“c”相关联。

3.19 非贪婪重复

非贪婪重复用占和模式匹配的目标序列的绝短子序列。贪婪重复用占据最长子序列。例如,“(a+)(a*b)”可相当目标序列“aaab”。当使用非贪婪重复时,它见面以捕获组
1 跟对象序列开头的子序列“a”相关联,将捕获组 2
及目标序列末尾的子序列“aab”相关联。当以贪婪匹配时,它会用捕获组
1 与子序列“aaa”相关联,将捕获组 2
跟子序列“b”相关联。

3.20 八进制转义序列

八进制转义序列包含一个倒斜杠,后以及一个、两只或三独八进制数字
(0-7)。它可是配合目标序列中以及这些数字所指定的值等的字符。如果数字全部也“0”,则行无效。例如,当以
ASCII 字符编码时,“\101”可匹配目标序列“A”。

3.21 普通字符

平常字符是以时下语法中从未特殊意义的外有效字符。

在 ECMAScript 中,下列字符具有特种意义:

  • ^ $ \ .* +
    ?( ) [ ] { } |

在 BRE 和 grep 中,下列字符具有非同寻常含义:

  • .[ \

此外,在 BRE 和 grep 中,当于一定上下文中使用下列字符时,它们具有独特意义:

  • 除下列情形外,“*”在拥有情况下均具备非同寻常含义:它是正则表达式中的率先单字符或紧跟以正则表达式中第一独“^”之后,或者,它是捕获组的率先个字符或紧跟在捕获组中第一单“^”之后。

  • 当“^”是正则表达式的率先个字符时,具有非同寻常含义。

  • 当“$”是正则表达式的末梢一个字符时,具有独特意义。

在 EREegrep 和 awk 中,下列字符具有特殊意义:

  • .[ \ ( * + ?{
    |

此外,在 EREegrep 和 awk 中,当于一定上下文中使用下列字符时,它们具有特种含义:

  • 当“)”与前的“(”配对经常,具有独特意义。

  • 当“^”是正则表达式的第一单字符时,具有突出意义。

  • 当“$”是正则表达式的终极一个字符时,具有非同寻常含义。

习以为常字符可匹配目标序列中的同样字符。默认情况下,如果个别单字符由同的值表示,即意味着相当成功。在无区分轻重缓急写的相当中,如果traits.translate_nocase(ch0) ==
traits.translate_nocase(ch1),则少独字符 ch0 和 ch1 匹配。在界别区域设置的配合中,如果traits.translate(ch0) ==
traits.translate(ch1),则鲜只字符 ch0 和 ch1 匹配。

3.22一定断言

毫无疑问断言可相当其情,但未占用目标序列中之其他字符。

示例:

  • “(?=aa)(a*)”可相当目标序列“aaaa”并以捕获组
    1 以及子序列“aaaa”相关联。

  • “(aa)(a*)”可匹配目标序列“aaaa”,并拿捕获组
    1 暨目标序列开头的子序列“aa”相关联,将捕获组 2
    以及目标序列末尾的子序列“aa”相关联。

  • “(?=aa)(a)|(a)”可配合目标序列“a”,并拿捕获组
    1 以及空序列相关联(因为肯定断言失败),将捕获组 2
    同子序列“a”相关联。它还而相当目标序列“aa”,并以捕获组
    1 暨子序列“aa”相关联,将捕获组 2 及空序列相关联。

3.23 Unicode转义序列

Unicode
转义序列包含一个相反斜杠,后与字母“u”,然后又同四独十六进制数字
(0-9a-fA-F)。它跟有着由四个数字指定的价的目标序列中之字符匹配。例如,当使用
ASCII 字符编码时,“\u0041”可配合目标序列“A”。

3.24 通配符

通配符可匹配目标表达式中除了换行符外的外字符。

3.25 字边界

字边界在偏下状况下出现:

  • 眼前字符在目标序列的发端,并且是不过词字符 A-Za-z0-9_. 之一

  • 当下字符位置超出目标序列的最终,并且目标序列中的终极一个字符为一个单词字符。

  • 即字符是一个单词字符,而前的字符不是。

  • 手上字符不是一个单词字符,而眼前的字符是。

3.26 字边界断言

当目标字符串中的手上岗位紧跟在配边界之后常,字边界断言即匹配。

季、匹配与寻找

要是使正则表达式与对象序列相兼容,整个正则表达式必须配合整个目标序列。例如,正则表达式“bcd”可配合目标序列“bcd”,但非兼容目标序列“abcd”或目标序列“bcde”。

要一旦学有所成执行正则表达式搜索,目标序列中之有位置必须备与正则表达式相兼容的子序列。搜索通常会从左到右查找最般配的子序列。

示例:

  • 于对象序列“bcd”中找找正则表达式“bcd“可以成功,并会配合整个序列。在对象序列“abcd”进行同样之搜也得以成功,并会见配合后三个字符。在对象序列“bcde”中开展相同的检索也可成功,并会见配合前三独字符。

  • 当靶序列“bcdbcd”中觅正则表达式“bcd“可以成功,并会见配合前三独字符。

当当对象序列中的某些位置有多个相当的子序列时,可由此简单种植办法来挑选相当的模式。第一配合配以选择以及正则表达式匹配时首先单找到的子序列。最丰富匹配将自于拖欠位置匹配的子序列中甄选最为丰富之一个。如果尽丰富之子序列不止一个,则最丰富匹配方法将甄选第一只找到的子序列。例如,如果以第一匹配配方法,则以靶序列“abcd”中觅正则表达式“b|bc”时见面配合配子序列“b”,因为分支组织的左手搜索词与该子序列匹配;因此,第一匹配配方法不见面尝试匹配分开支结构的右边搜索词。当以最丰富匹配方法时,进行同样的搜寻会配合“bc”,因为“bc”比“b”要长。

苟匹配到达目标序列的结尾而非黄,则有匹配即成功(即使没到达正则表达式的最终)。因此,在片匹配成功后,目标序列的附加字符或会见导致随后的片段匹配失败。但是,在有些匹配失败后,目标序列的附加字符不容许会见造成随后的一些匹配成功。例如,在局部匹配配下,“ab”可匹配目标序列“a”,但无配合“ac”。

五、格式标志

 

 

ECMAScript 格式规则

sed 格式规则

替换文本

“$&”

“&”

与整个正则表达式相匹配的字符序列 ([match[0].first, match[0].second))

“$$”

 

“$”

 

“\&”

“&”

“$`”(美元符号后跟反撇号)

 

与正则表达式相匹配的子序列之前的字符序列 ([match.prefix().first, match.prefix().second))

“$’”(美元符号后跟正撇号)

 

与正则表达式相匹配的子序列之后的字符序列 ([match.suffix().first, match.suffix().second))

“$n”

“\n”

在 n 位置与捕获组相匹配的字符序列,其中 n 是介于 0 到 9 之间的数字 ([match[n].first, match[n].second))

 

“\\n”

“\n”

“$nn”

 

在 nn 位置与捕获组相匹配的字符序列,其中 nn 是介于 10 到 99 之间的数字 ([match[nn].first, match[nn].second))