TR1 Regular Expressions
本主題討論 TR1 支援的各種規則運算式引擎文法。
本主題內容
規則運算式的文法
文法檢查摘要
語意的詳細資料
調配] 及 [搜尋
格式的旗標
規則運算式的文法
項目
項目可以是下列之一:
一般字元符合目標的順序相同的字元。
A 萬用字元 '。' 的比對任何目標的順序是新行以外的字元。
A 括號運算式表單的"expr",會比對的字元或定序序列中項目目標,同時也是由運算式所定義的集合中expr,或表單的"[^expr",會比對的字元或定序序列中項目目標不是由運算式所定義的集合中expr。
運算式expr可以包含的任何組合下列事項:
個別的字元。 將該字元加入至集合所定義的expr。
A 的字元範圍表單的 「ch1-ch2"。 將原則由封閉範圍中數值的字元加入 ch1, ch2 所定義的集expr。
A 字元類別表單的"[:name:]"。 將具名類別的字元加入至集合所定義的expr。
等價類別的表單] [=elt=]"。 將定序的項目,而且相當加入elt集合所定義的expr。
A 自動分頁符號表單的"[。elt.]". 將定序項目加入elt集合所定義的expr。
錨。 錨定 ' ^' 比對開頭的目標的順序。 錨定 '$' 比對目標序列結尾。
A 擷取群組表單的 」 ( 子運算式 ) 」,或"\ ( 子運算式 \) 」 在BRE和grep,會比對目標順序會符合模式之間的分隔符號的字元順序。
- 識別逸出表單的"\k",會比對字元k目標的順序。
例如:
"a"符合目標數字"a",但不是符合目標序列"B"、"b、"或"c"。
「。"符合所有目標的序列"A"、"B"、"b"和"c"。
"[b-z]"符合目標序列"b"和"c",但不是符合目標序列"a"或"B"。
"[: 低:]"符合目標序列"a"、"b",而且"c",但不是符合目標順序"B"。
"(a)"符合目標數字"a"和關聯子序列的擷取群組 1"a",但不符合目標序列"B"、"b、"或"c"。
在ECMAScript, BRE,以及grep,也可以是項目反向參考表單的"\dd",其中dd代表十進位的值符合目標等同於開次 n 比對的字元序列的序列中的字元序列的 n 擷取群組。 "(A) \ 1 」,例如符合目標數字"aa",因為第一個 (而且是唯一的) 擷取的群組與相符的初始化順序"a",然後 \ 1 符合最後一個數字"a"。
在ECMAScript,項目也可以是下列之一:
A 非擷取群組 表單的"(?: 子運算式 ) 」。 比對目標順序會符合模式之間的分隔符號的字元順序。
將有限檔案格式的逸出表單 「 \f"、"\n"、"\r"、"\t",或"\v"。 這些比對換頁字元、 換行、 換行、 水平頁籤,並垂直索引標籤中,分別目標的順序。
A 正極判斷提示 表單的"(? = 子運算式 ) 」。 比對字元序列的順序目標符合模式之間的分隔符號,但並不會變更目標序列中符合的項目位置。
A 負數判斷提示的表單?"(! 子運算式 ) 」。 比對任何不符合型態之間的分隔符號,且不會變更目標序列中符合的項目位置的目標順序的字元序列。
A 的十六進位逸出序列表單的 「 \xhh"。 比對目標順序由兩個十六進位數字字元hh。
A unicode 逸出序列表單的 「 \uhhhh"。 比對目標順序由四個十六進位數字字元hhhh。
A 控制項逸出序列表單的 「 \ck"。 比對控制字元來命名的字元k。
A 字組界限,判斷提示 "\b"的表單。 比對目標序列中的目前位置之後立即字組界限,。
A 負的字組界限,判斷提示 "\B"的表單。 比對目標序列中的目前位置後面不是字組界限,。
A dsw 字元逸出的表單 」 \d","\D","\s","\S","\w","\W"。 提供一個字元類別的簡短名稱。
例如:
"(?:a)"符合目標數字"a",但"(?:a) \ 1"無效,因為未擷取群組 1。
"(?=a)"符合目標數字"a"。 正數的判斷提示會比初始序列"a"在目標的順序和最終"a"在 [規則運算式比對的初始化順序"a"目標的順序。
"(?!a)"不符合目標順序"a"。
"a\b."符合目標數字"~",但不符合目標順序"ab"。
"a\B."符合目標數字"ab",但不符合目標順序"~"。
在awk,項目也可以是下列之一:
A 檔案格式的逸出表單"\\"、"\a"、"\b"、"\f"、"\n"、"\r"、"\t",或"\v"。 這些比對反斜線、 提醒、 退格鍵、 換頁字元、 換行、 輸入鍵符號作為、 水平頁籤,以及垂直索引標籤中,分別目標的順序。
八進位逸出序列表單的"\ooo"。 比對目標序列,其表示是由一個、 兩個或三個八進位數字表示的值中的字元ooo。
重複
以外的任何項目正極判斷提示、 負數判斷提示,或 錨後面可以重複計數。 最常見的一種重複計數採用下列格式"{min,max}",或"\ {min,max\}"在BRE和grep。 項目後面這種形式的重複計數至少符合min連續的項目] 和 [否超過max序列中符合的項目之連續的項目。 比方說,"{2,3}"符合目標順序"aa"及"aaa",目標順序,但不是目標順序"a"或目標順序"aaaa"。
重複計數也可以採用下列格式之一:
"{min}", or "\{min\}" in BRE and grep. Equivalent to "{min,min}".
"{min,}", or "\{min,\}" in BRE and grep. 等於"{min、 未繫結}"。
"*"。 相當於"{0,未繫結}"。
例如:
"{2}"符合目標時序"aa",但不是目標順序"a"或目標序列"aaa"。
"a {2} 」 符合目標順序"aa",目標順序"aaa",依此類推,但不符合目標順序"a"。
"*"符合目標數字"",目標順序"a"、 目標順序"aa",依此類推。
對於所有的文法,除了BRE和grep,重複計數也可以接受下列格式之一:
"?". 相當於 0,1"{0}"。
"+". 相當於"{1,未繫結}"。
例如:
"a"符合目標數字"",目標順序"a",但不是目標順序"aa"。
"+"符合目標數字"a"、 目標順序"aa",和等等,但目標順序""。
中ECMAScript,所有表單的重複計數都後面可以接著字元 '?',這會指定非窮盡的重複。
串連
規則運算式項目,不論是否有重複計算,可以被連接到表單更長的時間的規則運算式。 產生的運算式比對目標的順序是由個別的項目會比對序列的串連。 比方說,"{2,3} b"會符合目標序列"aab"和"aaab",目標順序,但不符合目標順序"ab"或目標序列"aaaab"。
替代
在所有的規則運算式文法,除了BRE和grep,串連的規則運算式後面可以接著字元 ' |' 和另一個串接規則運算式。 這種方式都可以採行串連的規則任何的運算式數字。 產生的運算式比對任何目標序列中符合一或多個串連的規則運算式。
當一個以上的串聯的規則運算式比對目標的順序, ECMAScript選擇比對在比對序列串連的規則運算式的第一個 (第一次符合)。 規則運算式的文法選擇來達成一個率最高相符。 比方說,"ab|cd"會符合目標順序"ab"與目標序列 「 cd 」,但不符合目標順序"阿布杜"或目標序列"acd"。
在grep和egrep,新行字元 ('\n') 可以用來分隔 alternations。
子運算式
在BRE和grep,子運算式是串連。 在 [其他規則運算式的文法,子運算式是用替代。
文法檢查摘要
下表摘要列出可用於各種不同的規則運算式文法 TR1 所提供的功能:
項目 |
BRE |
﹐ |
ECMA |
grep |
egrep |
awk |
---|---|---|---|---|---|---|
交替使用 ' |' |
+ |
+ |
+ |
+ |
||
交替使用 \n |
+ |
+ |
||||
錨點 |
+ |
+ |
+ |
+ |
+ |
+ |
反向參考 |
+ |
+ |
+ |
|||
括號運算式 |
+ |
+ |
+ |
+ |
+ |
+ |
擷取的群組,使用"()" |
+ |
+ |
+ |
+ |
||
擷取群組使用"\ (\)" |
+ |
+ |
||||
控制項的逸出序列 |
+ |
|||||
dsw 字元逸出 |
+ |
|||||
檔案格式的逸出 |
+ |
+ |
||||
十六進位逸出序列 |
+ |
|||||
識別逸出 |
+ |
+ |
+ |
+ |
+ |
+ |
負的判斷提示 |
+ |
|||||
負數字界限的判斷提示 |
+ |
|||||
非擷取群組 |
+ |
|||||
非窮盡重複 |
+ |
|||||
八進位逸出序列 |
+ |
|||||
一般字元 |
+ |
+ |
+ |
+ |
+ |
+ |
正數的判斷提示 |
+ |
|||||
重複使用"{}" |
+ |
+ |
+ |
+ |
||
重複使用"\ {\}" |
+ |
+ |
||||
重複使用 ' *' |
+ |
+ |
+ |
+ |
+ |
+ |
重複使用 '?' 和 '+' |
+ |
+ |
+ |
+ |
||
unicode 逸出序列 |
+ |
|||||
萬用字元 |
+ |
+ |
+ |
+ |
+ |
+ |
word 界限的判斷提示 |
+ |
語意的詳細資料
錨點
錨點會比對目標字串,而不是字元的位置。 A ' ^' 比對目標字串的開頭,並 '$' 比對目標字串的結尾。
反向參考
反向參考是十進位值 N.後面的反斜線 它符合內容的開次 n 擷取群組。 N 的值不能超過在前面的反向參考的擷取群組的數字。 在BRE和grep,n 的值由反斜線後面的十進位數字。 在ECMAScript,n 的值由必須立即接在反斜線之後的所有小數位數。 因此,在BRE和grep,n 的值為永遠不會超過 9,即使規則運算式有多個九個擷取群組。 在ECMAScript,n 的值是未繫結。
例如:
")(c+) \3 ((a+) (b +) 」 會比目標序列"aabbbcbbb"。 "\3"反向參考比對的第三個擷取的群組,也就是"(b+) 中的文字 」。 它不符合目標序列"aabbbcbb"。
"(a) 的 \2"是無效的。
"(b (((((((((a)))))))))) \10"有不同的意義BRE ,並在ECMAScript。 在BRE反向參考是"\ 1"。 反向參考比對的第一個擷取的群組的內容 (也就是一個以"(b"開頭,並結束最終")"和反向參考之前),以及最終的 '0 '代表一般的字元' 0'。 在ECMAScript,反向參考是"\10"。 它比對的第十個擷取群組,也就是最內層的一個。
括號運算式
括號運算式會定義一組字元以及排序項目。 括號運算式開頭字元 ' ^' 比對成功,如果集合中的沒有項目符合目前目標的順序的字元。 否則,如果其中一個集合中的項目符合目前目標的順序的字元,就會成功的符合項目。
藉由列出的任何組合可以定義一組字元單一字元,而, 字元範圍, 字元類別, 對等類別,以及 自動分頁符號。
擷取的群組
擷取的群組會標示其內容視為單一單位的規則運算式的文法中,並標示符合其內容的目標文字。 每個擷取群組相關聯的標籤是一個數字,由計算左括號,以標記最多可擷取群組,並包含左括號,將標記擷取目前的群組。 在此實作中,擷取群組的最大數目是 31。
例如:
"ab +"符合目標序列"abb",但不符合目標序列"abab"。
"(ab) +"不符合目標序列"abb",但又能符合目標序列"abab"。
"((a+)(b+))(c+)"matches the target sequence"aabbbc"and associates capture group 1 with the subsequence"aabbb", capture group 2 with the subsequence"aa", capture group 3 with"bbb", and capture group 4 with the subsequence"c".
字元類別
在括號運算式中的字元類別由括號運算式所定義的字集已命名的類別中新增所有字元。 若要建立一個字元類別,請使用"[:"後面跟隨"::"的類別名稱。 就內部而言,可以辨識的字元類別的名稱點撥打id = traits.lookup_classname。 字元ch屬於這種類別,如果traits.isctype(ch, id) ,則傳回 true。 預設值regex_traits範本支援下表中的類別名稱。
類別名稱 |
描述 |
---|---|
""alnum |
大小寫字母、 小寫的字母和數字 |
「 alpha 」 |
小寫字母和大寫字母 |
「 空白 」 |
空格或定位鍵 |
「 控制項 」 |
檔案格式的逸出個字元 |
「 數字" |
digits |
"圖表" |
大小寫字母、 大寫字母、 數字和標點符號 |
"低" |
小寫字母 |
「 列印 」 |
大小寫字母、 大寫字母、 數字、 標點符號和空格 |
"符號" |
標點符號 |
「 空間 」 |
空間 |
「 上方 |
大寫字元 |
""xdigit |
數字 'a','b','c',會 ','e'、 'f','A'、 'B'、 'C',固然','E'、 'F' |
"d" |
相同數字 |
"s" |
與分享空間相同 |
"w" |
與 alnum 相同 |
字元範圍
在括號運算式中的字元範圍加入所有字元的範圍由括號運算式所定義的字集。 若要建立的字元範圍,請放入字元 '-' 之間的範圍內第一個和最後一個字元。 如此一來將置入集合有數字的值不只於或等於的數值的第一個字元,且小於或等於的最後一個字元的數字值的所有字元。 請注意這一整組加入字元依存於字元的平台特定表示。 如果字元 '-' 就會發生的開頭或結尾括號運算式,或是做為第一個或最後一個字元的字元範圍,它代表本身。
例如:
"[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 字元編碼,"[+-]"表示的字元組 {'+ ',' '、 '-'}。
不過,當使用地區設定專屬的範圍時,範圍中的字元來決定的地區設定的定序規則。 自動分頁的範圍,以及範圍定義的最後一個字元之前的定義中的第一個字元之後的字元是集合中。 兩個結束字元也會在集合中。
定序的項目
定序的項目是多重字元序列,但被視為單一字元。
自動分頁符號
在括號運算式中的自動分頁符號加入排序項目到由括號運算式所定義的集合。 若要建立的自動分頁符號,請使用"[。"後面接著定序後面加上"."的項目。
控制項的逸出序列
控制項的逸出序列是反斜線後面的字母,後面的字母 ' c' 'a' 到 'z' A' 到 'Z'。 它比對來命名該字母的 ASCII 控制字元。 比方說,"\ci"符合目標序列"\x09",因為 < ctrl-i > 有 0x09 的值。
DSW 字元逸出
Dsw 字元逸出是一個字元類別的簡短名稱,如下表所示。
逸出序列 |
名為類別的對等用法 |
名為類別的預設值 |
---|---|---|
""\d |
"[[:d:]]" |
"[[: 數字:]]" |
""\D |
"[^[:d:]]" |
"[^ [: 數字:]]" |
""\s |
"[[:s:]]" |
"[[: 空間:]]" |
""\S |
"[^[:s:]]" |
"[^ [: 空間:]]" |
""\w |
"[[:w:]]" |
"[a-可以是-Z0-9_]"* |
""\W |
"[^[:w:]]" |
"[^ a-可以是-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"所組成。這些分別具有一般的意義,也就是反斜線、 提醒、 退格鍵、 換頁字元、 換行、 換行、 水平頁籤,以及垂直索引標籤上。 在ECMAScript,"\a"和"\b"不被允許。 (允許"\\",但它是識別逸出時,沒有檔案格式逸出)。
十六進位逸出序列
十六進位逸出序列是斜線,後面跟著字母 'x' 後面接著兩個十六進位數字 (0-fA-9a-f)。 它比對的值是由兩個數字所指定的目標序列中的字元。 比方說,"\x41"符合目標數字"A",當使用 ASCII 字元編碼方式。
識別逸出
識別逸出是反斜線後面接著一個字元。 它符合該字元。 它時,需要字元具有特殊意義。 藉由使用識別逸出,就會移除特殊的意義。 例如:
"*"符合目標數字"aaa",但不符合目標順序"*"。
"a\ *"與"aaa",目標順序不相符,但符合目標數字"*"。
識別逸出中允許的字元集而定的規則運算式的文法中,如下表所示。
文法 |
允許識別逸出字元 |
---|---|
BRE, grep |
{ '(', ')', '{', '}', '.', '[', '\', '*', '^', '$' } |
ERE, egre |
{ '(', ')', '{', '.', '[', '\', '*', '^', '$', '+', '?', '|' } |
awk |
ERE加上 {'] ','/'} |
ECMAScript |
除了那些可以被識別項的組件的所有字元。 這通常包括字母、 數字、 '$'、 '_',以及 unicode 逸出序列。 如需詳細資訊,請參閱 ECMAScript 語言規格中。 |
個別的字元
個別的字元,在括號運算式會將該字元加入至由括號運算式所定義的字集。 除了開頭時,括號運算式中的任何地方 ' ^' 代表本身。
例如:
"[abc]"符合目標序列"a"、"b、"及"c",但不是序列"d"。
"[^ abc]"符合目標順序"d",但無法將目標序列"a"、"b、"或"c"。
"[^ bc]"符合目標序列"a"、"b"、"c"和"^",但不是目標順序"d"。
中所有的規則運算式文法,除了ECMAScript,如果 ']' 是開啟的第一個字元 '[' 遵循初期的第一個字元或' ^',它代表本身。
例如:
"[]"是無效的因為沒有 ']' 結束括號運算式。
"[abc]]"符合目標序列"a"、"b"、"c"和"]",但不是目標順序"d"。
"^ abc]"符合目標順序"d",但無法將目標序列"a"、"b"、"c"或"]"。
在ECMAScript,使用 ' \]] 來表示字元 ']' 括號運算式中。
例如:
"[]"符合目標數字"a"因為是空的括號運算式。
"[\]abc]"符合目標序列"a"、"b"、"c"和"]",但不是目標順序"d"。
負的判斷提示
負的判斷提示會比對任何動作,但它的內容。 它不會佔用任何目標的順序的字元。 比方說,"(嗎? !.aa)(a*)"符合目標數字"a"和關聯子序列的擷取群組 1"a"。 它不符合目標順序"aa"或"aaa"目標順序。
負數字組界限,判斷提示
負的單字邊界 assert 比對,如果目標字串中的目前位置後面不是字組界限,。
非擷取群組
非擷取群組視為單一單位在規則運算式的文法中,標示其內容,但沒有標記目標文字。 比方說,"(a)(?:b)*(c) 符合目標文字"abbc",並關聯子序列的擷取群組 1"a"入侵並佔領群組 2 與子序列"c"。
非窮盡重複
非窮盡的重複使用比對模式的目標順序最短的目的的序列。 窮盡重複使用最舊的。 例如,"(a+)(a*b)"比對目標序列"aaab"。 非窮盡的重複使用時,它會將擷取的群組 1 與子序列"a"開頭的目標順序及擷取群組 2 與子序列"aab"結尾的目標的順序。 會使用窮盡符合項目時,它將擷取的群組 1 與子序列"aaa",並擷取群組 2 關聯子序列"b"。
八進位逸出序列
八進位逸出序列是反斜線後面接著一個、 兩次或三個八進位數字 (0-7)。 它比對的值是由這些數字所指定的目標序列中的字元。 如果所有的數字 '0',順序是不正確。 比方說,"\101"符合目標數字"A",當使用 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 與子序列"aaaa"相關聯。
"(aa)(a*)"matches the target sequence"aaaa"and associates capture group 1 with the subsequence"aa"at the beginning of the target sequence and capture group 2 with the subsequence"aa"at the end of the target sequence.
"(?=aa) (a) |(a)"符合目標數字"a"和夥伴 (因為正數的判斷提示失敗),擷取群組 1 以空的時序入侵並佔領與子序列的群組 2"a"。 它也符合目標數字"aa",並將擷取的群組 1 與子序列"防空砲火 」,並擷取群組 2 以空的時序相關聯。
Unicode 逸出序列
Unicode 逸出序列是斜線,後面跟著字母 'u' 後面四個十六進位數字 (0-fA-9a-f)。 它比對的值是由四個數字所指定的目標序列中的字元。 比方說,"\u0041"符合目標數字"A",當使用 ASCII 字元編碼方式。
萬用字元
萬用字元比對目標運算式,除非是新行中的任何字元。
字組界限,
字組界限,就會發生在下列情況:
目前的字元在目標序列的開頭,一個字的字元A-Za-z0-9_.
目前的字元位置為過去的目標在序列結束,目標序列中的最後一個字元為一字的字元。
目前的字元是一個文字字元和前置字元不是。
目前的字元不是其中一個文字字元且前置字元。
Word 界限的判斷提示
當目標字串中目前的位置就緊接的後面時,word 界限 assert 比對字組界限,。
調配] 及 [搜尋
以符合目標順序的規則運算式,整個規則運算式必須符合目標的順序。 例如,規則運算式"bcd"符合目標數字"bcd",但不符合目標順序"abcd 這樣"也沒有目標序列"bcde"。
規則運算式搜尋成功,就必須要目的序列某處目標順序符合規則運算式。 通常是搜尋最左邊的相符子序列。
例如:
規則運算式"bcd",目標順序"bcd"搜尋成功,並比對整個序列。 相同的搜尋目標順序"abcd 這樣"也會成功,並比對的最後三個字元。 相同的搜尋目標序列"bcde"中也會成功,並比對的前三個字元。
規則運算式"bcd",目標序列"bcdbcd"中的搜尋成功,並比對的前三個字元。
如果沒有符合目標序列中的某些位置的多個目的序列,有兩種方式可以選擇比對模式。 第一次符合選擇符合規則運算式時第一次找到子序列。 最長符合與符合該位置會選擇最長的目的序列。 如果有一個以上的最大長度的子序列,從中選出相符會選擇第一次找到的那一個。 比方說,使用第一個符合的項目時,目標順序"abcd 這樣"的"b|bc"的規則運算式中搜尋符合子序列"b",因為左手邊的替代詞彙比對該目的序列。 因此,第一個符合的項目就不會試圖右手邊的替代詞彙。 使用最長的符合項目時,同一種搜尋比對"bc",原因是"bc"大於"b"。
如果比對目標序列結尾不失敗而定,即使它無法到達的規則運算式的結尾,就會成功部分相符。 因此,部分比對成功之後,將字元附加至目標的順序可能會造成稍後的部分比對失敗。 然而,部分比對失敗之後,將字元附加至目標的順序不會導致較新的部分比對成功。 比方說,部分符合項目,與"ab"會比目標序列"a",但不是"ac"。
格式的旗標
採用的格式規則 |
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) |