TR1 Regular Expressions
本主题讨论 TR1 支持各种正则表达式引擎的语法。
主题内容
正则表达式语法
语法摘要
语义详细信息
与和搜索
格式标志
正则表达式语法
元素
元素可以是下列情况之一:
与目标序列的相同字符的 普通字符 。
通配符 “”。这与目标序列的所有字符除换行符。
窗体的 括号表达式expr“[]”中,与某个字符或排序规则元素在目标的顺序也在表达式中设置的定义 expr,或窗体 “[^expr]”中,与某个字符或排序规则元素在目标顺序不在表达式中设置的定义 expr。
该表达式 expr 可以包含下列内容的任意组合:
单个字符。 添加,字符。 expr设置的定义。
窗体 “ch1-ch2”的 字符范围 。 添加由近距离的字符 [ch1, ch2的] 值表示对 expr设置的定义。
窗体的 字符类 “[:name:]”。 添加一个名为类的字符。 expr设置的定义。
窗体的 等效性类 “[=elt=]”。 添加具有 elt 等效于 expr集定义的排列的元素。
窗体的 排列的符号 “[。elt。]”。 添加排序规则元素 elt 到 expr设置的定义。
定位点。 锚定 “^”与目标序列的开头;锚定 “$”与目标序列的结尾。
窗体的 捕获组 “( 子表达式 )”或 “\ 子表达式 (\)”在 BRE 和 grep,匹配字符序列在目标的顺序由分隔符之间的模式匹配。
- 标识转义 窗体 “\k”,与目标序列的字符 k 。
示例:
“a”与目标顺序 “a”,但不符合该目标排序 “B”, “a b”或 “c”。
“”。与所有个目标排序 “a”, “a B”, “a b”和 “c”。
b-z “[]”与目标排序 “b”和 “c”,但不符合该目标排序 “a”或 “B”。
“[: 较低:]”与目标排序 “a”, “a b”和 “c”,但与目标顺序 “B”。
“(a)”与目标顺序 “a”和关联捕获组 1 与 subsequence “a”,但是,不符合该目标排序 “B”, “a b”或 “c”。
在 ECMAScript、 BRE和 grep,元素还可以是 返回引用 窗体 “\dd”,其中 dd 表示匹配字符序列在目标的顺序与字符序列由第 n 捕获组匹配的十进制值 N。 例如, “\ 1 ") 与目标顺序 “aa”,因为第一个 (仅限于和) 获取组匹配初始序列 “a” \ 1 然后与最终序列 “a”。
在 ECMAScript,元素还可以是下列情况之一:
窗体的 非捕获组 “(?: 子表达式 )”。 匹配字符序列在分隔符之间的模式匹配的对象序列的。
受限 文件格式转义 窗体 “\ f”, “\ n”, “\ r”, “\ t”或 “\ v”。 这些与换页符,换行符,符,水平制表符和垂直制表符,分别,在目标顺序。
正回顾断言 窗体 “(? = 子表达式 )”。 匹配字符序列在分隔符之间的模式匹配的对象序列的,但是,不会更改在目标顺序匹配位置。
负断言 窗体 “(!? 子表达式 )”。 与所有字符序列。不匹配 " 分隔符之间的架构的目标序列的并且不会更改在目标顺序匹配位置。
十六进制转义序列 窗体 “\ xhh”。 与两个十六进制数字 hh表示的目标序列中的字符。
unicode 转义序列 窗体 “\ uhhhh”。 与四个十六进制数字 hhhh表示的目标序列中的字符。
控件转义序列 窗体 “\ ck”。 匹配由字符 k名为的控制字符。
字边界断言 窗体 “\ b”。 匹配,则在目标序列的当前位置位于 字边界之后。
否定性 字边界断言 窗体 “\B”。 匹配,则在目标序列的当前位置不是位于字边界 之后。
窗体 “\d", "\D", "\s", "\S", "\w", "\W”的 dsw 字符转义 。 为字符类提供短名称。
示例:
“(?: a)”与目标顺序 “a”,但是, “(?: ,因为没有捕获组, 1.) \ 1 " 无效。
“(? 的 =a)”与目标顺序 “a”。 正回顾断言与初始序列 “a”在目标序列和最终 “a”在正则表达式匹配初始序列 “a”在目标顺序。
“(!? 的。)”与目标顺序 “a”。
“a \ b.”与目标序列 “”, a~,但与目标顺序 “ab”。
“\B”。与目标顺序 “ab”,,但与目标顺序 “a~”。
在 awk,元素还可以是下列情况之一:
窗体的 文件格式转义 “\ \”, “\”, “\ b”, “\ f”, “\ n”, “\ r”, “\ t”或 “\ v”。 这些匹配反斜杠,警报, backspace,换页,换行符,符,水平制表符和垂直制表符,分别,在目标顺序。
八进制转义序列 窗体 “\ooo”。 与表示一个,两个或三个八进制数字表示的值 ooo的目标序列中的字符。
重复
正如除 之外的所有元素, 断言 负断言,或者 定位点 可由重复次数执行。 最常见的重复次数采用形式 “{min,max}”或 “\ {000…000}min,max\}”。 BRE 和 grep。 通过重复次数的此窗体按照匹配至少 min 后续匹配项的元素和不多于与该元素序列的 max 后续匹配项。 例如, “a {2,3}”与目标顺序 “aa”和目标顺序 “aaa”,但是,目标顺序 “a”或不是目标顺序 “aaaa”。
重复次数也可以采用以下形式之一:
“{min}”或 “\ \min{}”。 BRE 和 grep。 等效于 “{min,min}”。
“min{,}”或 “\ \min{,}”。 BRE 和 grep。 等效于 “{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,重复次数的所有窗体可由字符后跟 “? ”,即 非贪婪重复。
串联
正则表达式元素,有或没有 重复次数,串联在一起形成较长的正则表达式。 结果表达式匹配为序列串联由个别元素匹配的目标序列。 例如, “a b} {2,3”与目标顺序 “aab”和目标序列 “”, aaab,但与目标顺序 “ab”或目标顺序 “aaaab”。
替换
在除 BRE 和 grep的所有正则表达式语法中,已连接的正则表达式可由字符后跟 “|”和另一个连接的正则表达式。 任意数量的连接的正则表达式可以通过合并。 结果表达式匹配匹配一个或多个连接的正则表达式的所有目标顺序。
当多个连接的正则表达式与目标序列时, ECMAScript 选择与该序列作为匹配的第一个连接的正则表达式 (第一个匹配项);其他正则表达式语法选择获得 最长的匹配一个。 例如, “ab|CD”与目标顺序 “ab”并且目标顺序 “CD,”,但与目标顺序 “abd”或目标顺序 “acd”。
在 grep 和 egrep,换行符 (“\ n) 来分隔替换。
子表达式
在 BRE 和 grep,子表达式是串联。 在其他正则表达式语法,子表达式是替换。
语法摘要
下表汇总了可在 TR1 提供的各种正则表达式语法的功能:
元素 |
BRE |
在之前 |
ECMA |
grep |
egrep |
awk |
---|---|---|---|---|---|---|
替换使用 “|” |
+ |
+ |
+ |
+ |
||
使用 “\ n 的替换 |
+ |
+ |
||||
定位点 |
+ |
+ |
+ |
+ |
+ |
+ |
返回引用 |
+ |
+ |
+ |
|||
括号表达式 |
+ |
+ |
+ |
+ |
+ |
+ |
使用捕获组 “()” |
+ |
+ |
+ |
+ |
||
使用 “(\ \)”的捕获组 |
+ |
+ |
||||
控件转义序列 |
+ |
|||||
dsw 字符转义 |
+ |
|||||
文件格式转义 |
+ |
+ |
||||
十六进制转义序列 |
+ |
|||||
标识转义 |
+ |
+ |
+ |
+ |
+ |
+ |
负断言 |
+ |
|||||
负字边界断言 |
+ |
|||||
非捕获组 |
+ |
|||||
非贪婪重复 |
+ |
|||||
八进制转义序列 |
+ |
|||||
普通字符 |
+ |
+ |
+ |
+ |
+ |
+ |
正回顾断言 |
+ |
|||||
重复使用 “{}” |
+ |
+ |
+ |
+ |
||
使用 “\ \ {}”重复 |
+ |
+ |
||||
重复使用 “*” |
+ |
+ |
+ |
+ |
+ |
+ |
重复使用 “?”和 “+” |
+ |
+ |
+ |
+ |
||
unicode 转义序列 |
+ |
|||||
通配符 |
+ |
+ |
+ |
+ |
+ |
+ |
字边界断言 |
+ |
语义详细信息
定位点
定位点与目标字符串,而不是字符的位置。 “^”与目标字符串的开头,并且,一个 " $”与目标字符串的末尾。
返回引用
返回引用由一个小数值 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 (((())))))\ 10 " 具有不同的含义。 BRE 和在 ECMAScript。 在 BRE 返回引用 “\ 1 "。 返回引用与第一个捕获组 (即开始 “的某个目录 (与最终的 b”和 " 结束)”和是,在返回引用之前),并且,最终 “0 " 匹配普通字符 “0 "。 在 ECMAScript,返回引用 “\ 10 "。 它对第十捕获组,也就是说,最内层一个。
括号表达式
括号表达式定义一组字符和 排列元素。 当括号表达式以字符 “^”时开始匹配成功,如果在目标的当前字符的排序设置匹配的任何元素。 否则,与 set 匹配成功,如果任何一个元素在目标序列的当前字符。
字符集可以通过列出各个 字符、 字符范围、 字符类, 它们类和 排列符号的所有组合定义。
捕获组
捕获组标记其内容作为在正则表达式语法的一个单元并标记与其内容的目标文本。 与每个捕获组的标签是数字,计数左括号取决于标记捕获组模式将匹配左括号指示当前捕获组。 此实现中,捕获组的最大数量为 31。
示例:
“ab+”与目标序列 “”, abb,但与目标顺序 “abab”。
“(ab) +”与目标序列 “”, abb,但与目标顺序 “abab”。
“(a+) (b+)(c+)”与目标顺序 “aabbbc”并将捕获组 1 与 subsequence “aabbb”,与 subsequence “aa”捕获组 2,与 “bbb”捕获组 3 与 subsequence “c”捕获组 4。
字符类
中括号表达式中的字符类添加一个名为类的所有字符到由括号表达式定义的字符集。 若要创建字符类,请使用 “[: ”后跟类后跟 “:]”。 在内部,字符类的名称通过调用 id = traits.lookup_classname识别。 ,如果 traits.isctype(ch, id) 返回 true,字符 ch 属于这样的类。 默认 regex_traits 模板下表中支持类名。
类名 |
说明 |
---|---|
“alnum” |
小写字母、大写字母和数字 |
“alpha” |
小写字母和大写字母。 |
“空” |
空格或制表符 |
“cntrl” |
文件格式 转义字符 |
“数字” |
数字 |
“关系图” |
小写字母、大写字母、数字和标点 |
“较低” |
小写字母 |
“打印” |
小写字母、大写字母、数字、标点符号和空格 |
“punct” |
标点 |
“空间” |
空格 |
“太大 |
大写字符 |
“xdigit” |
数字, “a, b “, “c, d “, “e, " f ", “A, B “, “C, D “, “E, " F " |
"d" |
和数字相同 |
“s” |
和空间相同 |
“w” |
和 alnum 相同 |
字符范围
在中括号表达式中的字符范围添加到该范围内的任意字符到由括号表达式定义的字符集。 若要创建字符大小,请将字符 “-”范围内的第一个和最后一个字符之间。 执行此操作放在设置有一个数值大于或等于第一个字符的数值和小于或等于最后一个字符的数值的所有字符的。 通知用户设置添加的字符取决于字符的特定于平台的表示形式。 如果字符 “-”首先进行或括号表达式的结尾,或者字符范围中的第一个或最后一个字符,它表示自身。
示例:
“[0-7]”表示一组字符 {“0 ", “1 ", “2 ", “3 ", “4 ", “5 ", “6 ", “7 "}。 它与该目标排序 “0 ", “1 ",依此类推,,而不是”。
在使用 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 字符编码的系统, “[+--]”表示一组字符 {“+”, “,”, “-”}。
但是,在使用时,区分区域设置的大小,介于范围的字符取决于区域设置的排序规则。 范围内定义的第一个字符之后排列的字符,因此,在该范围内定义的最后一个字符在设置的。 两个结束字符也在集。
排列元素
一个排列的元素是被视为一个字符存在多字符序列。
排列符号
中括号表达式中的排列的符号添加一个 排列的 元素添加到由括号表达式定义设置的。 若要创建排列的符号,请使用 “[”。后跟排列的元素后跟 “]”。
控件转义序列
控件转义序列是一个后跟一个字母执行反斜杠 " c 字母 " a " 到 “z 或 " A " 到 “Z。 它匹配由该字母名为的 ASCII 控制字符。 例如,在中,因为具有值 0x09, “\ ci”与目标顺序 “ ctrl-i \ x09”。
DSW 字符转义
如下表所示, dsw 字符转义是短名称字符类,。
转义序列 |
等效命名的 Class |
默认命名的 Class |
---|---|---|
“\ d” |
“[[: d:]]” |
“[[: 数字:]]” |
“\D” |
“[^ [: d:]]” |
“[^ [: 数字:]]” |
“\ s” |
“[[: s:]]” |
“[[: 空白:]]” |
“\S” |
“[^ [: s:]]” |
“[^ [: 空白:]]” |
“\ w” |
“[[: w:]]” |
“[[a-za-z0-9_]+] * “ |
“\W” |
“[^ [: w:]]” |
“[] “* ^a-zA-Z0-9_ |
*ASCII 字符集
等效性类
中括号表达式等效类添加任何字符以及等效性类定义的排列的元素等效于设置的由括号表达式定义的 排列元素 。 若要创建等效性类,请使用 “[=”后跟一个排列的元素后跟 “=]”。 在内部,两个排列的元素 elt1 和 elt2 等效,如果 traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end())。
文件格式转义
文件格式包括转义通常 C 语言字符转义序列, “\\", "\a", "\b", "\f", "\n", "\r", "\t", "\v".These 通常具有含义,也就是说,斜杠,警报, backspace,换页,换行符,符,水平制表符和垂直制表符,分别。 在 ECMAScript, “\”和 “\ b”不允许的。 (" \ \”允许,但是,它是标识转义,而不是文件格式转义)。
十六进制转义序列
十六进制转义序列是两个十六进制数字后跟一个字母执行反斜杠 " x (09afAF)。 它与具有值由两个数字指定的目标序列中的字符。 例如, “\x41" matches the target sequence "A" when ASCII 使用字符编码。
标识转义
标识转义是单个字符的反斜杠。 它与该字符。 ,当字符具有特殊含义时,需要;使用标识转义,移除特殊含义。 例如:
“a*”与目标顺序 “aaa”,,但与目标顺序 “a*”。
“a \ *”与目标顺序 “aaa”,但是,与目标顺序 “a*”。
如下表所示,在标识转义允许的字符集取决于正则表达式语法,。
语法 |
允许的标识转义字符 |
---|---|
BRE, grep |
{ '(', ')', '{', '}', '.', '[', '\', '*', '^', '$' } |
ERE, egre |
{ '(', ')', '{', '.', '[', '\', '*', '^', '$', '+', '?', '|' } |
awk |
ERE 以及 {””, “/”} |
ECMAScript |
所有字符除可以是标识符的一部分的文件。 通常,这包括字母、数字、 “$”, “_”和 unicode 转义序列。 有关更多信息,请参见 ECMAScript 语言规范 (cls)。 |
各个字符
中括号表达式的单个字符将该字符到由括号表达式定义的字符集。 任意位置。除首先的一个括号表达式, “^”表示自身。
示例:
abc “[]”与目标排序 “a”, “a b”和 “c”,但是,不是序列 “d”。
“[]” ^abc 与目标顺序 “d”,但是,不是目标排序 “a”, “a b”或 “c”。
a^bc “[]”与目标排序 “a”, “a b”, “c”和 “^”,但是,不是目标顺序 “d”。
在所有正则表达式语法中除 ECMAScript,因此,如果 “]”是一个遵循开始 “的第一个字符 [”或是一个遵循初始 “^”的第一个字符,它表示自身。
示例:
“[]”无效,因为没有 “]”结束括号表达式。
“[] abc]”与目标排序 “a”, “a b”, “c”,将 “]”,但是,不是目标顺序 “d”。
“[^] abc]”与目标顺序 “d”,但是,不是目标排序 “a”, “a b”, “c”或 “]”。
在 ECMAScript,请使用 “\]”表示字符 “]”中括号表达式。
示例:
“[]”与目标顺序 “a”,因为括号表达式为空。
“[] \] abc”匹配目标排序 “a”, “a b”, “c”,将 “]”,而不是目标顺序 “d”。
负断言
负断言与任何操作,只不过其内容。 它不使用在目标是否有任何字符。 例如, “(!? aa) (a*)”与目标顺序 “a”和关联捕获组 1 与 subsequence “a”。 它不与目标顺序 “aa”或目标顺序 “aaa”。
负字边界断言
,如果在目标字符串中的当前位置不是位于字边界 之后,否定性断言字边界匹配。
非捕获组
非捕获组标记其内容作为在正则表达式语法的单个单元,但是,不标记目标文本。 例如, “) (?: b) * (c) 与目标文本 “abbc”并将捕获组 1 与 subsequence “a”和与 subsequence “c”的捕获组 2。
非贪婪重复
非贪婪重复使用模式匹配目标序列的最短 subsequence。 贪婪的重复使用最长。 例如, “(a+) (a*b)”与目标顺序 “aaab”。 在使用了非贪婪的重复的,则它将捕获组 1 与 subsequence “a”在目标序列和捕获组 2 开始使用 subsequence “aab”在目标序列末尾。 当使用时贪婪匹配,其关联捕获组 1 与 subsequence “aaa”与 subsequence “b”的捕获组 2。
八进制转义序列
八进制转义序列是一个,两个或三个八进制数字后跟杠 (0-7)。 它与具有值按这些数字指定的目标序列中的字符。 如果所有数字为 “0 ",顺序无效。 例如, “\101" matches the target sequence "A" when ASCII 使用字符编码。
普通字符
普通字符是没有当前语法的特殊意义的任何有效字符。
在 ECMAScript,以下字符具有特殊含义:
- ^ $ \ . * + ? ( ) [ ] { } |
在 BRE 和 grep,以下字符具有特殊含义:
- . [ \
此外,当在特定上下文时,在 BRE 和 grep,以下字符具有特殊含义:
“*”在任何情况下都具有特殊含义,但,当它是在正则表达式中的第一个字符或遵循初始 “^”在正则表达式中的第一个字符时,或者,当它是捕获组的第一个字符或遵循初始 “^”在获取组中的第一个字符时。
,它是一个正则表达式的第一个字符时, “^”具有特殊含义。
,它是一个正则表达式的最后一个字符时, “$”具有特殊含义。
在 ERE、 egrep和 awk,以下字符具有特殊含义:
- . [ \ ( * + ? { |
此外,当在特定上下文时,在 ERE、 egrep和 awk,以下字符具有特殊含义。
‘)”具有特殊含义,则匹配一前面 “时 (”。
,它是一个正则表达式的第一个字符时, “^”具有特殊含义。
,它是一个正则表达式的最后一个字符时, “$”具有特殊含义。
普通字符与目标序列的相同字符。 默认情况下,这意味着匹配成功,如果两个字符由同一个值来表示。 在不区分大小写匹配,两个字符 ch0 和 ch1 匹配,如果 traits.translate_nocase(ch0) == traits.translate_nocase(ch1)。 在区分区域设置匹配,两个字符 ch0 和 ch1 匹配,如果 traits.translate(ch0) == traits.translate(ch1)。
正回顾断言
正回顾断言与其内容,但是,不使用在目标是否有任何字符。
示例:
“(? =aa) (a*)”与目标顺序 “aaaa”并将捕获组 1 与 subsequence “aaaa”。
“(aa) (a*)”与目标顺序 “aaaa”并将捕获组 1 与 subsequence “aa”在目标序列和捕获组 2 开始使用 subsequence “aa”在目标序列末尾。
“(? =aa))|(a)”与目标顺序 “a”和关联捕获组 1 与一个空序列 (因为正回顾断言失败) 和具有 subsequence 的 “a”捕获组 2。 它还与目标顺序 “aa”和关联捕获组 1 与 subsequence “aa”和一个空序列的捕获组 2。
Unicode 转义序列
unicode 转义序列是四个十六进制数字后跟一个字母执行反斜杠 " u (09afAF)。 它与具有值由四位数指定的目标序列中的字符。 例如, “\u0041" matches the target sequence "A" when ASCII 使用字符编码。
通配符
通配符与目标表达式的所有字符除换行符。
字边界
字边界在以下情况:
当前字符是在目标序列开始处并为某个单词字符 A-Za-z0-9_.
当前字符位置是通过目标序列的结尾,并在目标序列中的最后一个字符是某个单词字符。
当前字符是一个单词字符,并且前一个字符不是。
当前字符不是一个单词字符,并且前一个字符为。
字边界断言
,在目标字符串中的当前位置位于 字边界之后时,断言字边界匹配。
与和搜索
为了使匹配一个的正则表达式目标序列,整个正则表达式必须与整个目标顺序。 例如,正则表达式 “bcd”与目标顺序 “bcd”,但与目标顺序 “abcd”也不目标顺序 “bcde”。
为了使成功正则表达式的搜索,必须具有 subsequence 是位于与此正则表达式的目标顺序。 搜索通常查找最左侧的匹配 subsequence。
示例:
搜索该正则表达式 “bcd”在目标顺序 “bcd”成功并与整个序列。 在目标顺序 “abcd”的同一搜索也会成功并且与前三个字符。 在目标顺序 “bcde”的同一搜索也会成功并且与前三个字符。
搜索该正则表达式 “bcd”在目标顺序 “bcdbcd”成功并且与前三个字符。
如果存在多个在目标序列中的某些位置匹配的一 subsequence,有两种选择匹配的模式。 第一个匹配项 选择第一个找到的 subsequence,该正则表达式匹配时。 最长的匹配 从该位置匹配一个选择最长 subsequence。 如果有多个具有最大长度的一 subsequence,最长的匹配选择第一个找到的脚本。 例如,使用时,第一个匹配项,搜索正则表达式 “b|,因为替换左侧的术语与该 subsequence,” BC 在目标顺序 “abcd”与 subsequence “b”;因此,第一个匹配项不尝试替换的右侧的术语。 当使用时最长的匹配,对于 “BC”搜索匹配项,因为 “BC”比 “b”长。
分部匹配成功,如果匹配到达目标序列的结尾,而失败,则,即使未到达该正则表达式的结尾。 因此,在中,在分部匹配成功后,追加到目标序列的字符会导致后面的部分匹配失败。 但是,在中,在分部匹配失败后,追加到目标序列的字符不会导致后面的部分匹配成功。 例如,使用分部匹配, “ab”对目标顺序 “不是”,但 “ac”。
格式标志
ECMAScript 布局规则 |
SED 布局规则 |
替换文本 |
---|---|---|
“$ ” |
"&" |
与整个正则表达式中的字符序列 ([match[0].first, match[0].second)) |
“$$” |
“$” |
|
|
“\ ” |
"&" |
“$ `” (回引号后跟美元符号) |
|
前面 subsequence 与此正则表达式中的字符序列 ([match.prefix().first, match.prefix().second)) |
“$” (前向引号后跟美元符号) |
|
按照 subsequence 与此正则表达式中的字符序列 ([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) |