Provided by:
manpages-zh_1.5.1-1_all 
NAME
re_syntax - Tcl 正則表達式的語法。
_________________________________________________________________
yz DESCRIPTION
一hF (regular expression ) 描-
z了一類字符串。它是匹配特定字符串而不匹配其他的字符串的一蚍狾﹛C
REP DIFFERENT FLAVORS OF REs
正則表達式(「RE」)由 POSIX 定義,有兩種榆(flavor): Xi
RE(``EREs'')舞E(``BREs'')。ERE 粗略的相當於傳統的 egrep
的正則表達式,而 BRE 粗略的相當於傳統的 ed 的正則表達式。這-
蚢窶{增加了第三種榆獢霹E(``AREs''),它基本上是 ERE 再加上一些-
n的擴展。
譯注:grep 預設支持 BRE,通過指定 -E 選項來支持 ERE,歷史上的 egrep 和
fgrep 已經合並入 grep 中。ed、sed 支持 BRE,lex、AWK 支持 ERE。
這茪漭U階Dn描z ARE。提供 BRE 主-
n是為了在一些老程式中反向(backward)相容;它戔N最後討論。POSIX ERE
基本上是 ARE 的一荅u子集。在 ERE 中不存在的 ARE 的特征將被指示出來。
hFyk REGULAR EXPRESSION SYNTAX
實現 Tcl 正則表達式使用了 Henry Spencer 寫的包,基於 POSIX 1003.2
規定和一些(不是全部) Perl5 擴展 (感謝 Henry!)。下悸熙多正則表達式描z是-
鴢吨ㄟ坁滷q他的手冊飭s過來的。
譯注:Perl5 的正則表達式也是從 Henry Spencer 所寫的包演變而來。
一 ARE 是一茤峖h茈娏|'分隔(branch)(構成的),它匹配與任何一-
茪壑鉹t的一茼r符序列。
一茪壑銢O零或多茼篪p起來(constraint)wql(quantified
atom)(構成的)。它與每蚨c件(約束或定量鴗l)所匹配的任何字符序列的一-
茼篪p相匹配,組成這茼r符序列的串聯的第一茼r符序列與這茪壑銂熔臚@-
蚨c件相匹配,第二茼r符序列與第二蚨c件相匹配,以此類推。一-
茠聾壑鉹t空串。
一茤w量鴗l是可能跟隨一茬璊@wq (quantifier) 的-
鴗l。不加定量符,它匹配這适子的一茪t。定量符和它所定量的-
鴗l的匹配如下:
* 零茤峖h茬o适子的匹配的一荍C
+ 一茤峖h茬o适子的匹配的一荍C
? 零茤峇@茬o适子的匹配的一荍C
{m} 嚴格的 m 茬o适子的匹配的一荍C
{m,} m 或更多茬o适子的匹配的一荍C
{m,n} 從 m 到 n (包括二者)茬o适子的匹配的一荍C;m 不能超過 n
*? +? ?? {m}? {m,}? {m,n}?
不貪婪的 (non-greedy) 定量符,它匹配與上-
惇萓P的可能性,但偏好最小字符數而不是最大字符數的匹配(參見MATCHING
匹配)。
使用 { 和 } 的形式叫(bound)。數 m 和 n 是無符號十進制整數,允釭-
q 0 到 255(包括0 及 255)。
l是下列之一:
(re) (這裏的 re 是任何正則表達式) 匹配對 re 的一-
茪t,為可能的報告而記錄(最長和最短的)匹配
譯注:使用圓括號來組合鴗l。例如,ab* 被識別為鴗l a 和鴗l b
的閉包 b* 的串聯 a(b)*,而不是鴗l a 和鴗l b 的串聯 ab 的閉包
(ab)*。捕獲的意思是把在圓括號中的子表達式所匹配的字符序列保存下來,由後續的後引用去使用。
(?:re)
同上,但不報告(設置為「非捕獲」的圓括號)
() 匹配一茠臟瞗A為可能的報告而記錄(匹配)
(?:) 匹配一茠臟瞗A不報告
[chars]
一茪雓A號表達式 (bracket expression) ,匹配 chars 中的任何一-
茼r符(詳情參見 BRACKET EXPRESSIONS 方括號表達式)
. 匹配任何單一字符
\k (這裏的 k 是一茷D alphanumeric
(字母或數字)字符),匹配被接受為普通字符的這茼r符,例如,\\
匹配一茪炱袟b字符
\c (這裏的 c 是一 alphanumeric 字符(可能跟隨著其他字符)),一q
(escape)(專屬 ARE),參見後悸慟SCAPES 轉義)
{ 當跟隨著不是數字的一茼r符的時-
唌A匹配左花括號字符`{';在跟隨著一蚍r的時唌A它是一-
ㄙ熄}始(參見前)
x 這裏 x 是沒有其他意義的一茬璊@字符,匹配這茼r符。
(constraint) 在指定條件滿足的時啎t一茠臟瞗C一茯蠽穭ㄞ鉊聸H一-
茤w量符。簡單的約束如下;其他的在以後的 ESCAPES 轉義 章節中介紹。
譯注:約束的術語叫錨定
^ 匹配一行的開始
$ 匹配一行的結束
(?=re) e(positive lookahead) (專屬 ARE),匹配任何與 re
相匹配的子串的開始端點
(?!re) tre
相匹配的子串的開始端點
前行約束不能包括後引用(參見後),並且其中的所有圓括號被認為是非捕獲的。
一 RE 不能結束於`\'.
AF BRACKET EXPRESSIONS
一茪雓A號表達式是一茼b`[]'中包圍的一茼C表。它通常匹配列表中的任意一-
茬璊@字符(參見後)。如果這茼C表以「^」為開始,它匹配不屬於這-
茼C表剩餘部分的任意一茬璊@字符(參見後)。
如果在這茼C表中的兩茼r符被`-'分割,這是在歸並序列(collating
sequence)中這兩茼r符之間(包括二者)的字符的完整S圍的簡寫,例如,[0-9] 在
ASCII 中匹配任何十進制數字。兩紎圍不能共享同一蚨暐I,比如 a-c-e
是非法的。S圍是很依賴於整理序列的,可移植程式應該避免依靠它怴C
譯注z -- 用來確定字符或寬字符字符串的邏輯次序的最小實體。一-
蚞蓂z元素的組成n麼是一茬璊@字符,n麼是被整理為一蚢篘撉漕-
茤峓韟h字符。由當前地域(locale)中的 LC_COLLATE 類屬的-
T定整理元素的當前設置。
譯注zC -- 當前地域中的 LC_COLLATE 類屬的設置確定
整理元素的相對次序。這茼r符次序定義所有整理元素的相對位置,在這-
茼葷尹C茪葛應ㄕ有一荌艉@的位置。
n在這茼C表中包括一茪憒r的 ] 或者 - ,最簡單的方法是把它包圍在 [. 和 .]
中使它成為一蚞蓂z元素(見後)。可替代的,使它成為第一-
茼r符(跟隨在可能的‘^’的後),或(專屬 ARE) 加以
‘\fR-’,使它成為最後的字符,或一-
S圍的第二端點。n使用一茪憒r - 作為一紎圍的開始端點,可以使它成為一-
蚞蓂z元素或(專屬 ARE) 加以‘\’先導。除了這些例外、一些使用 [
(參見下段)的組合、和轉義,在一-
茪雓A號表達式中的所有其他特殊字符失去其特殊意義。
在一茪雓A號表達式當中,在 [. 和 .] 當中包圍一k(collating
element)(一茼r符、一茼h字符序列被整理為如同一茬璊@字符,或給二者的一-
蚞蓂z序列名字)表示這蚞蓂z元素的一茼r符序列。這荍C是這-
茪雓A號表達式列表中的一茬璊@元素。在有多字符整理元素的地域中,一-
茪雓A號表達式可以匹配多於一茼r符。 |
所以(潛藏的),即使在方括號表達式中未出現多字符整理元素,以 ^ |
為開始的一茪雓A號表達式仍可以匹配多字符整理元素! (注意:Tcl |
目前沒有多字符整理元素。這些信息只是用來解釋概念。) |
例如,假定整理序列包含一 ch 多字符整理元素,則 RE [[.ch.]]*c (後- |
掘聸H著 c的零或多 ch) 匹配`chchcc'的最先的5茼r符。還有 [^c]b 匹配整- |
罛chb'(因為 [^c] 匹配多字符 ch)。
在一茪雓A號表達式中,在 [= 和 =] 當中包含的一蚞蓂z元素是一翀quivalence
class 等價類,表示等價於這蚞蓂z元素的所有整理元素的字符序列,包括它自-
。(如果沒有其他等價的整理元素,與在分界符`[.'和`.]'中包含一樣對待。)
例如,如果 o 和o^ 是一茧本驨的成-
,則`[[=o=]]'、`[[=o^=]]'、和`[oo^]'都是同義詞。一茧本驨不能是一-
S圍的端點。 (注意:Tcl 目前只實現了 Unicode |
地域。它不定義任何等價類。上悸漕狺l只是用來解釋概念。)
在一茪雓A號表達式中,在 [: 和 :] 中包含的一character class 字符類
的名字表示屬於這蚚的所有字符的列表(不是所有整理元素!)。標準字符類有:
alpha 一茼r母
upper 一茪j寫字母
lower 一茪p寫字母
digit 一茪Q進制數字
xdigit 一茪Q六進制數字
alnum 一 alphanumeric (字母或數字)
print 一 alphanumeric (同於 alnum)
blank 一茠躓璈 tab 字符
space 在顯示的文本中產生白空格的一茼r符
punct 一蚍陔I字符
graph 有圖形表示的一茼r符
cntrl 一荓惆謢r符
一茼a域可以提供其他的字符類。 (注意:Tcl 目前只實現了一茼a域:Unicode |
地域。) 一茼r符類不能用做一紎圍的端點。
方括號表達式有兩荅S殊情況: 方括號表達式 [[:<:]] 和 [[:>:]]
是約束,分別匹配在一茼r開始處和結束處的空串。定義一-
茼r為既沒有前導的又沒有尾隨的單詞字符的單詞字符的一荍C。一-
茬瘚字符是一 alnum 字符或一-
茪U劃線(_)。這些特殊的方括號表達式已被淘汰;ARE
使用者應當轉而使用約束轉義(見後)。
q ESCAPES
轉義(專屬 ARE),它以 \ 為開始後掘聸H著一茼r母字符,存在一些變體:
字符錄入(entry)、類簡寫、約束轉義、和後引用。在 ARE 中,跟隨著一
alphanumeric 字符但不約束一茼陵鐃鉊q的 \ 是非法的。在 ERE 中,沒有轉義:
在方括號表達式外部,跟隨著一 alphanumeric 字符的一 \ 僅表示這-
茼r符為一荋雲q字符,而在一茪雓A號表達式內部, \ 是一-
荋雲q字符。(後者是在 ERE 和 ARE 之間的一蚢篕琱W的不相容。)
字符錄入轉義 (Character-entry escapes) (專屬 ARE) 的存在簡便了在 RE
中指定一茷D列印和其他非常規字符:
\a 警報(震鈴)字符,如同 C 語言
\b 退格,如同 C 語言
\B \ 的同義詞,在有多層反斜槓處理的一些應用中用來減少雙反斜槓
\cX (這裏的 X 是任何字符) 字符的低端5位與 X
的低端5位相同,而其他位全是零
\e 其整理序列名字是‘ESC’的字符,如果嘗試失敗,這茼r符有八進制
033
\f 換間A如同 C 語言
\n 換行,如同 C 語言
\r 回車,如同 C 語言
\t 水 tab,如同 C 語言
\uwxyz
(這裏的 wxyz 是嚴格的四茪Q六進制數字) 在本地字節次序中的 Unicode
字符 U+wxyz
\Ustuvwxyz
(這裏的 stuvwxyz 是嚴格的八茪Q六進制數字)
保留給假定的某種擴展到32位的 Unicode
\v 垂直 tab,如同 C 語言
\xhhh
(這裏的 hhh 是十六進制數字的任意序列) 其十六進制 0xhhh
的字符(不管使用了多少十六進制數字它都是一茬璊@字符)。
\0 其 0 的字符
\xy (這裏的 xy 是嚴格的兩茪K進制數字,並且不是一(參見後))
其八進制0xy 的字符
\xyz (這裏的 xyz 是嚴格的兩茪K進制數字,並且不是一(參見後))
其八進制 0xyz的字符
十六進制數字是 `0'-`9', `a'-`f', 和`A'-`F'. 八進制數字是 `0'-`7'.
字符錄入轉義總是被接受為普通字符。例如, \135 是ASCII中的 ] 而 \135
不終結一茪雓A號表達式。但是n小心,一些應用(例如 C
編譯器)在正則表達式包得到它怳妨en自己解釋這些序列,這可能就-
n求寫兩次(四次 (quadrupling),等等) `\'。
類簡寫轉義 Class-shorthand escapes (專屬 ARE)
為特定的通用字符類提供簡寫:
\d [[:digit:]]
\s [[:space:]]
\w [[:alnum:]_] (注意有下劃線)
\D [^[:digit:]]
\S [^[:space:]]
\W [^[:alnum:]_] (注意有下劃線)
W在方括號表達式中,沒有外悸漱雓A號的`\d', `\s', 和 `\w' ,還有 `\D',
`\S', 和 `\W' 都是非法的。 (所以,等價於[a-c[:digit:]] 的 [a-c\d] |
和等價於 [a-c^[:digit:]] 的[a-c\D] 是非法的)
約束轉義 constraint escape (AREs only)
是如果指定條件滿足則匹配空串的一茯蠽禲A它被寫成一蚋鉊q:
\A 只在字符串開始處匹配(與 `^'的不同之處請參見下悸 MATCHING 章節)
\m 只在一茼r開始處匹配
\M 在一茼r的結束處匹配
\y 只在一茼r的開始處或結束處匹配
\Y 只在一茼r的不是開始處或結束處的某點上匹配
\Z 只在一茼r符串的結束處匹配(與 `$'的不同之處請參見下悸 MATCHING
章節)
\m (這裏的 m 是一茷D零數字)一back reference 後引用, 參見後
\mnn (這裏的 m 是一茷D零數字,而 nn 是一些更多的數字,並且十進制
mnn 不大於目前為止閉合的捕獲圓括號的數目) 一峞A參見下情@
同於上掖W定的 [[:<:]] 和 [[:>:]]
,字定義為既沒有前導的又沒有尾隨的單詞字符的一荍C。 一茬瘚字符是一
alnum 字符或一茪U劃線(_)。 在方括號表達式中,約束轉義是非法的。
一(專屬 ARE)
匹配的字符串與用數字指定的在圓括號中的子表達式所匹配的字符串相同,所以(例如)
([bc])\1 匹配 bb 或 cc 而不是 ‘bc’。在 RE
中,子表達式必須全部在後引用的前-
情C以前導的圓括號(左圓括號)的次序給子表達式編號。非捕獲圓括號不定義子表達式。
譯注:後引用是嚄 BRE 的特征,ERE 無此特征。例如,表達式 ^(.*)\1$
匹配由同一茼r符串的兩茯s連的出現組成的一行,而表達式 (a)*\1 不匹配
a。(a)(b)\1 匹配 aba,(a)(b)\2 匹配 abb,(a(b))\1 匹配 abab,(a(b))\2
匹配abb。(a)\1 等價於 a{2,2}。
在八進制字符錄入轉義和後引用之間有一蚞史遺留的二義性,只能像上-
探ㄔ靰漕獐迉帢珛o式的方法來解決。一茷e導的零總是指示一茪K進制轉義。一-
茬璊@的非零數字,不跟隨著其他數字,總是接受為一茷嶀犍峞C不以一-
蚢s為開始的一茼h數字序列如果在一茼X適的子表達式後情A則被接受為一茷嶀犍
(比如給出的後引用的序號在合法S圍內),否則被接受為一茪K進制轉義。
yk METASYNTAX
除了上探yz的主n的語法之外,還可獲得特殊形式和雜項的一些語法性的設施。
一般通過應用相關的方式指定使用的 RE 的-
榆獢C但是,可以(director)來屏棄它怴C如果某種榆瑼漱@ RE
以‘***:’為開始,則 RE 的剩餘部分是一 ARE。如果某種榆瑼漱@ RE
以‘***=’為開始,則 RE 的剩餘部分被接受為一-
茪憒r串,並且其中的所有字符被認為是普通字符。
一 ARE 可以以embedded options 嵌入選項為開始: 一荍C (?xyz) (這裏的
xyz 是一茤峓韟h的字母字符) 指定影響 RE 剩餘部分的選項。它-
抴ㄗ悕M屏棄由應用指定的任何選項。可獲得的選項字母有:
b RE 的剩餘部分是一 BRE
c 大小寫敏感 (通常是預設的)
e RE 的剩餘部分是一 ERE
i 大小寫不敏感 (參見下悸 MATCHING 匹配)
m 歷史上的 n 的同義詞
n 換行敏感匹配 (參見下悸 MATCHING 匹配)
p 部分換行敏感匹配 (參見下悸 MATCHING 匹配)
q RE 的剩餘部分是一茪憒r (被引用起來的
``quoted'')字符串,都是普通字符
s 非換行敏感匹配 (通常是預設的)
t 緊湊語法 (通常是預設的;參見後)
w 反向部分換行敏感 (離奇的 ``weird'') 匹配 (參見下悸 MATCHING 匹配)
x 展開語法 (參見後)
嵌入選項影響的序列被 ) 終結。它怚u在一 ARE
的開始處有效,此後不可以在其中使用。
除了通常的(緊湊) RE 語法,其中所有字符都有意義,還有一-
荇i開語法,在所有榆瑼 RE 中都可以使用 -expanded 開關來獲得它,或者在
ARE 中使用嵌入的 x 選項。在展開語法中,忽略白空格和在 # 和隨後的換行(或
RE 結束)之間的所有字符,這就允酗F在一荋_雜的 RE
中進行分段和注釋。有對這些基本規則的三茖狴~:
保留有前導`\'的白空格或 `#'
保留在方括號表達式中的白空格或 `#'
在多字符符號如 ARE `(?:' 或 `\(' 中間的白空格或注釋是非法的
展開語法中的白空格是 blank、tab 、和屬於空格字符類的任何字符。 |
最後,在 ARE 中,在方括號表達式外情A序列 `(?#ttt)' (這裏的 ttt 是不包含
`)' 的任何文本) 是一茠`釋,它將被完全忽略。同樣,不允野戌b多字符符號如
`(?:'中間的出現。這種注釋是歷史產物而不是很有用的設施,它的使用被淘汰了;應使用展開語法來替代。
如果應用(或一荓狻l的 ***= 指示符)指定使用者的輸入被作為一-
茪憒r串而不是一 RE 來對待,則不能獲得這些元語法擴展。
t MATCHING
譯注:下z引自 XBD RE 規定中的匹配定義,略有變更。
譯注:零茤峖h茼r符的一荍C被稱為與 RE 匹配的條件是在這-
荍C中的字符對應於這蚍狾〝w義的一茼r符序列。
譯注:對一茪t的序列的查找開始於一茼r符串的開始處,停止於找到第一-
茪t字符串的時唌A這裏定@茠熒N思為「字符串中最-
開始的」。如果模式允酗t的字符有可變的數目,因此在這-
蚋I開始的序列多於一荂A則匹配最長的那荍C。例如: RE bb* 匹配 abbbc
中的第2到第4茼r符,而 RE (wee|week)(knights|night) 匹配 weeknights
的所有10茼r符。
譯注:與整茪t是最長的最左匹配相一P,從左到右的每-
茪l模式,匹配最長的可能的字符串。為此,一-
茠臟窸Q認為比根本沒有匹配長。例如,針對(against) abcdef 匹配 RE (.*).*
,子表達式 (1) 是 abcdef,而針對 bc 匹配 RE (a*)*,子表達式 (1) 是空串。
譯注:通過向每-
茪l表達式遞歸的提供最左最長匹配來確定什麼(子)字符串對應於子表達式是可能的,而附帶條件是整體匹配是最左的、最長的。例如,針對acdacaaa
匹配 (ac*)c*d[ac]*1 匹配出 acdacaaa (這裏 1=a); 而簡單的給 (ac*)
匹配最長的將生成 1=ac,但整體匹配將變小
(acdac)。概念上,實現必須檢查每種可能的匹配,並在生成的最左最長的總體匹配中,為最左子表達式挑出一-
茬怐曭漱t(子串)並以此類推。注意,這意味著子表達式的匹配是上下文相關的:
在一茷雂j的 RE 中的一茪l表達式所匹配的字符串可能與它作為一蚇W立的 RE
時不同,還有,即使在類似的字符序列中,在同一茷雂j的 RE 中的同一-
茪l表達式的兩蚢磛狴i能匹配不同的長度。例如,在 RE (a.*b)(a.*b) 中,兩-
荍馴相同的子表達式將分別的匹配 accbaccccb 的四茤M六茼r符。
如果一 RE 能匹配一茧鼎w字符串中的多於一茠漱l串,RE 匹配在這-
茼r符串中最先開始的子串。如果 RE能匹配的在這一點上開始的子串多於一-
荂A它的選擇決定於它n(preference): n麼是最長的子串,-
n麼是最短的子串。
多數鴗l和所有約束,都沒有偏好。一茼雀磟A號的 RE 與 RE
有相同的偏好(有可能沒有)。一茼 {m} 或 {m}? 定量符的定量鴗l與鴗l自-
有相同的偏好(有可能沒有)。一茼釣銗L弗`的定量符的定量鴗l(包括在 {m,n} 中
m 等於 n) 偏好最長的匹配。一茼酗ㄢg婪定量符的定量鴗l(包括在 {m,n}? 中
m 等於 n 的情況) 偏好最短的匹配。一茪壑隞P在它的裏悸熔臚@茤w量-
鴗l有相同的偏好。用 | 操作符連接起來的一茈悃瑧或多茪壑銌捰赤 RE
偏好最長的匹配。
取決於匹配整 RE
的規則所強加的約束,基於可能子串的表現,子表達式可以匹配最長或最短的可能子串,在
RE 中開始較-
的子表達式優先於開始較晚的。注意,外部的子表達式優先於其中的構件子表達式。
注意,可以分別的使用定量符 {1,1} 和 {1,1}? 在子表達式或整 RE
上強制最長和最短偏好。
用字符數而不是整理元素數來測量匹配長度。一茠臟窸Q當作比根本沒有匹配長
,例如 bb* 匹配 `abbbc'中間的三茼r符, (week|wee)(night|knights) 匹配
`weeknights'的所有10茼r符,在針對(against) abc 匹配 (.*).* 的時-
堈磟A號中的子表達式匹配所有這三茼r符,而在針對 bc 匹配 (a*)* 的時埲蒑
RE 和圓括號中子表達式都匹配一茠臟瞗C
如果指定了大小寫無關匹配,效果如同所有字母的大小寫區別都消失了。當存在大小寫區別的一-
茼r符在方括號表達式外惕@為一荋雲q字符出現的時-
唌A它被有效的轉變成包含大小寫二者的一茪雓A號表達式, 所以 x
變成了`[xX]'。當它出現在一-
茪雓A號表達式中,把它對應的所有大小寫添加到方括號中,所以[x] 變成
[xX]而 [^x] 變成 `[^xX]'。
如果指定了換行敏感匹配,則 . 和使用 ^
的方括號表達式永不匹配換行字符(所以除非 RE
顯式安排,否則永不會跨越換行來進行匹配),並且 ^ 和 $
除了分別匹配字符串的開始和結束之外,還分別的匹配在換行之後和之前的空串。ARE
.Pu匹配字符串的pGwF部分換行敏感,這將P使 .
和方括號表達式成為換行敏感匹配,但不影響 ^ 和‘$’。
如果指定了反向部分換行敏感,這將P使 ^ 和 $ 成為換行敏感匹配,但不影響 .
和方括號。這不是很有用,提供它只是為了對稱。
Me LIMITS AND COMPATIBILITY
對於 RE 的長度沒有強加特定的制。想n高度可移植的程式不應該依賴比 256
字節長的 RE,因為遵從 POSIX 的實現可能拒絕接受這樣的 RE。
專屬 ARE 並且實際上與 POSIX ERE 不相容的特征是在方括號表達式中的 \
不失去它的特殊意義。所有其他 ARE 特征使用的語法在 POSIX ERE
中是非法的,或著有未定義或未指定的效果;指示符的 *** 語法同樣不屬於 BRE
和 ERE 二者的 POSIX 語法。
釵h ARE 擴展取自 Perl,為了整理它怞荈i行了一些變更,還有一些 Perl
擴展未提供。-
n注意的不相容包括:‘\b’、‘\B’,缺乏對尾隨的換行的特殊對待,為受換行敏感匹配影響的
RE 增加了方括號表達式補全,在先行約束中對圓括號和後引用的-
制,和最長/最短匹配的匹配語義。
自從這茈]的一茼期的 beta 測試版本做了變更以來,RE
的匹配的規則包含正常的和非貪婪的定量符二者。(新規則更加簡單和清晰,而不在猜測使用者的真實意圖上費很大力氣。)
Henry Spencer 的鴝l的 1986 regexp 包,仍被廣泛的使用(例如,在 Tcl 8.1
之前的發行中),它實現了今天的 ERE 的一茼期版本。在 regexp 的近似 ERE
(簡寫為 RRE)和 ARE 之間有四點不相容: In roughly increasing order of
significance:
在 ARE 中,跟隨著一茼r母字符的 \ n麼是轉義n麼是一蚇欞~,而在
RRE 中,它只是寫字母的另一種方式。這不應該是一荌暋D,因為在 RRE
中沒有理由寫出這樣的一荍C。
在 ARE 中跟隨著一蚍r的 { 是一荍蘄ㄙ熄}始,而在 RRE 中,{
總是一荋雲q字符。這樣的序列是少見的,並且經常導P一蚇欞~,-
鴞]是隨後的字符看起來不像一茼陵蘆漣蘄ㄐC
在 ARE 中,在`[]'內 \ 保持是一荅S殊字符,所以在`[]'內一茪憒r \
必須寫成`\\'。在 RRE 中,在[]內 `\\' 也給出一茪憒r
\,但只有真正的偏執狂程式才例行公事的雙寫反斜槓。
ARE 為 RE
報告最長的和最短的匹配,而不是按指定的查找次序找到的第一-
茪t。這可能影響寄希望於第一茪t不被報告的一些
RRE。(廢棄了為快速匹配而優化查找次序的 RRE 細P工藝(ARE
並行的檢查所有可能的匹配,並且它怐漫坒鄏b很大程度上不敏感於它-
怐煽_雜性),而為故意的找尋非最長或最短的一-
茪t而開發的查找次序需n姨g。)
hF BASIC REGULAR EXPRESSIONS
BRE 在一些方掩P ERE 有所區別。 `|', `+', 和 ?
是普通字符並且沒有與之等價的弁遄C用於束縛的分界符是 \{ 和 `\}', 而 { 和
} 本足O普通字符。用於嵌套子表達式的圓括號是 \( 和`\)', 而 ( 和 ) 自-
是普通字符。除了在 RE 或一荈磟A號中的子表達式的開始處之外, ^ 是一-
荋雲q字符,除了在 RE 或一荈磟A號中的子表達式的結束處之外, $ 是一-
荋雲q字符,而在 RE 或一荈磟A號中的子表達式的開始處之外出現的 * 是一-
荋雲q字符(在可能的前導 `^' 之後)。最後,可獲得單一數字的後引用, \< 和
\> 分別是 [[:<:]] 和 [[:>:]] 的同義詞;沒有其他可獲得的轉義。
SEE ALSO
RegExp(3), regexp(n), regsub(n), lsearch(n), switch(n), text(n)
r KEYWORDS
match, regular expression, string
[]
Hhh
[]
2001/10/26
m Linux manUpn:
http://cmpp.linuxforum.net