規則運算式 2 (re2.h) 語法
規則運算式是描述字元字串集的標記法。 當字串位於正則表示式所描述的集合中時,我們假設正則表示式 符合 字串。
最簡單的規則運算式是單一常值字元。 除*+?()|
以外的元字元,字元與其本身相符。 若要比對中繼字元,請使用反斜杠將它逸出。 例如, \+
會比對常值加號字元。
兩個正則表達式可以改變或串連以形成新的正則表達式:如果 e1 符合 s 和 e2 符合 t,則 e1 | e2 符合 s 或 t,e1e2 符合 st。
中繼字元 *
、 +
和 ?
是重複運算符: e1*
符合零個或多個 (可能不同) 字串的序列,每個字串串都符合 e1; e1+
符合一或多個; e1?
比對零或一。
從最弱到最強系結的運算符優先順序如下:
- 交替
- 串聯
- 重複運算子
明確括弧可用來強制使用不同的意義,如同算術表達式一樣。 一些範例: ab|cd
等同於 (ab)|(cd)
; ab\
等同於 a(b\)
。
到目前為止描述的語法是大多數傳統的 Unix egrep 規則運算式語法。 此子集足以描述所有一般語言。 一般語言是一組字串,只要使用固定的記憶體數量,就能在單一傳遞文字中進行比對。 較新的正則表達式功能 (特別是 Perl,以及複製它) 已新增許多運算符和逸出序列的語言。 這些變更可讓正則表達式更簡潔,有時更密碼化,但功能更強大。
此頁面列出了 RE2 接受的規則運算式語法。
它也會列出 PCRE、PERL 和 VIM 接受的一些語法。
語法資料表
各種單字元運算式 | 範例 |
---|---|
任何字元,可能包括新行字元 (s=true) | . |
字元類別 | [xyz] |
反字元類別 | [^xyz] |
Perl 字元類別 (連結) | \d |
反 Perl 字元類別 | \D |
ASCII 字元類別 (連結) | [[:alpha:]] |
反 ASCII 字元類別 | [[:^alpha:]] |
Unicode 字元類別 (單字母名稱) | \pN |
Unicode 字元類別 | \p{Greek} |
反 Unicode 字元類 (單字母名稱) | \PN |
反 Unicode 字元類別 | \P{Greek} |
複合 | |
---|---|
xy | x 後接 y |
x|y | x 或 y (偏好 x) |
重複 | |
---|---|
x* | 零或多個 x,偏好更多 |
x+ | 一個或多個 x,偏好更多 |
x? | 零或一個 x,偏好更多 |
x{n,m} | n 或 n+1 或 ... 或 m x,偏好更多 |
x{n,} | n 或更多 x,偏好更多 |
x{n} | 完全符合 n x |
x*? | 零或多個 x,偏好更少 |
x+? | 一個或多個 x,偏好更少 |
x?? | 零或一個 x,偏好零 |
x{n,m}? | n 或 n+1 或 ... 或 m x,偏好更少 |
x{n,}? | n 或更多 x,偏好更少 |
x{n}? | 完全符合 n x |
x{} | (≡) (VIM 不支援) |
x{-} | (≡ x*?) (不支援) VIM |
x{-n} | (≡ x{n}?) (不支援) VIM |
x= | (≡ x?) (不支援) VIM |
實作限制:計算表單 x{n,m}
、 x{n,}
和 x{n}
會拒絕建立最小或最大重複計數超過 1000 的表單。 無限重複不受此限制。
所有格重複 | |
---|---|
x*+ | 零個或多個 x、所有格 (不支援) |
x++ | 一或多個 x、所有格 (不支援) |
x?+ | 零個或一個 x、所有格 (不支援) |
x{n,m}+ | n 或 ... 或 m x,所有格 (不支持) |
x{n,}+ | n 或多個 x,所有格 (不支援) |
x{n}+ | 完全符合 n x,所有格 (不支持) |
分組 | |
---|---|
(re) | 編號擷取群組 (子符合) |
(?P<名稱>re) | 具名 & 編號擷取群組 (子相符) |
(?<名稱>re) | 具名 & 編號擷取群組 (子相符) (不支援) |
(?'name're) | 具名 & 編號擷取群組 (子相符) (不支援) |
(?:re) | 非擷取群組 |
(?flags) | 在目前的群組內設定旗標;非擷取 |
(?flags:re) | 在 re 期間設定旗標;非擷取 |
(?#text) | 注釋 (不支援) |
(?|x|y|z) | 分支編號重設 (不支援) |
(?>re) | re 的所有格匹配 (不支持) |
re@> | re 的所有格匹配 (不支援) VIM |
%(re) | 非擷取群組 (不支援) VIM |
Flags | |
---|---|
i | 不區分大小寫 (預設為 false) |
m | 多行模式:除了開始/結束文字 (預設為 false) 以外,還能有 ^ 和 $ 符合開始/結束行。 |
s | let . 符合 \n (預設為 false) |
U | ungreedy:x* 和 x*?、x+ 和 x+?等的交換意義 (預設 false) |
旗標語 xyz
法 (設定) 或 -xyz
(清除) 或 xy-z
(集 xy
、清除 z
) 。
空字串 | |
---|---|
^ | 文字或行的開頭 (m=true) |
$ | 文字 (例如 \z 非 \Z) 或行的結尾 (m=true) |
\A | 文字的開頭 |
\b | 在 ASCII 字的邊界 (一邊是\w,另一邊是 \W, \A, or \z) |
\B | 不在 ASCII 字的邊界 |
\g | 搜尋的次文字的開頭處 (不支援) PCRE |
\G | 最近符合的結尾處 (不支援) PERL |
\Z | 在文字結尾處,或文字結尾處的新行字元之前 (不支援) |
\z | 在文字結尾處 |
(?=re) | 在文字與 re 相符之前 (不支援) |
(?!re) | 在文字不符合 re 之前 (不支援) |
(?<=re) | 在文字與 re 相符之后 (不支援) |
(?<!re) | 在文字與 re 不相符之后 (不支援) |
re& | 在文字與 re 相符之前 (不支援) VIM |
re@= | 在文字與 re 相符之前 (不支援) VIM |
re@! | 在文字不符合 re 之前 (不支援) VIM |
<re@= | 在文字與 re 相符之后 (不支援) VIM |
re@<! | 在文字與 re 不相符之后 (不支援) VIM |
\zs | 開始匹配組 (= \K) (不支援) VIM |
\ze | 結束匹配組 (不支援) VIM |
\%^ | 檔案開頭 (不支援) VIM |
\%$ | 檔案結尾 (不支持) VIM |
\%V | 在螢幕上 (不支援) VIM |
\%# | 游標位置 (不支援) VIM |
\%'m | 標記 m 位置 (不支援) VIM |
\%23l | 在行 23 中 (不支援) VIM |
\%23c | 在欄 23 中 (不支援) VIM |
\%23v | 在虛擬欄 23 中 (不支援) VIM |
逸出序列 | |
---|---|
\a | bell (≡ \007) |
\f | 表單摘要 (≡ \014) |
\t | 水平索引標籤 (≡ \011) |
\n | 新行字元 (≡ \012) |
\r | 滑動架傳回 (≡ \015) |
\v | 垂直定位字元 (≡ \013) |
* | 常值 *,適用於任何標點符號字元 * |
\123 | 八進位字元代碼 (最多三個數字) |
\x7F | 十六進位字元碼 (正好兩個數字) |
\x{10FFFF} | 十六進位字元代碼 |
\C | 即使在 UTF-8 模式中也與單一位元組相符 |
\Q...\E | 常值文字 ... 即使 ... 有標點符號 |
\1 | 反向參考 (不支援) |
\b | 退格鍵 (不支援) (使用 \ 010) |
\cK | 控制 char ^K (不支援) (使用 \001 等) |
\e | 逸出 (不支援) (使用 \033) |
\g1 | 反向參考 (不支援) |
\g{1} | 反向參考 (不支援) |
\g{+1} | 反向參考 (不支援) |
\g{-1} | 反向參考 (不支援) |
\g{name} | 具名反向參考 (不支援) |
\g<名稱> | 副程式撥號 (不支援) |
\g'name' | 副程式撥號 (不支援) |
\k<名稱> | 具名反向參考 (不支援) |
\k'name' | 具名反向參考 (不支援) |
\lX | 小寫 X (不支援) |
\ux | 大寫 x (不支持) |
\L...\E | 小寫文字 ... (不支援) |
\K | 重設 $0 的開頭 (不支援) |
\N{name} | 具名 Unicode 字元 (不支援) |
\R | 分行符號 (不支援) |
\U...\E | 大寫文字 ... (不支援) |
\X | 擴充 Unicode 序列 (不支援) |
%d123 | 十進位字元 123 (不支援) VIM |
%xFF | 十六進位字元 FF (不支援) VIM |
%o123 | 八進位字元 123 (不支援) VIM |
%u1234 | Unicode 字元 0x1234 (不支援) VIM |
%U12345678 | Unicode 字元 0x12345678 (不支援) VIM |
字元類別元素 | |
---|---|
x | 單一字元 |
A-Z | 字元範圍 (全人) |
\d | Perl 字元類別 |
[:foo:] | ASCII 字元類別 foo |
\p{Foo} | Unicode 字元類別 Foo |
\pF | Unicode 字元類別 F (單字母名稱) |
具名字元類作為字元類元素 | |
---|---|
[\d] | 數位 (≡ \d) |
[^\d] | 非數位 (≡ \D) |
[\D] | 非數位 (≡ \D) |
[^\D] | 否非數位 (≡ \d) |
[[:name:]] | 字元類別中的具名 ASCII 類別 (≡ [:name:]) |
[^[:name:]] | 在反字元類中的具名 ASCII 類別 (≡ [:^name:]) |
[\p{Name}] | 字元類別中的具名 Unicode 屬性 (≡ \p{Name}) |
[^\p{Name}] | 反字元類別中的具名 Unicode 屬性 (≡ \p{Name}) |
Unicode 字元類名 --一般類別 | |
---|---|
C | 其他 |
副本 | control |
Cf | format |
Cn | 未指派的代碼點 (不支援) |
Co | 私密用法 |
Cs | 替代 |
L | 字母 |
LC | 大小寫字母 (不支援) |
L& | 大小寫字母 (不支援) |
Ll | 小寫字母 |
Lm | 修飾詞字母 |
Lo | 其他字母 |
Lt | 大寫字母 |
Lu | 大寫字母 |
M | 標記 |
Mc | 間距標記 |
Me | 封閉標記 |
Mn | 非間距標記 |
N | 數字 |
Nd | 十進位數 |
Nl | 字母數字 |
否 | 其他數字 |
P | 標點符號 |
Pc | 連接器標點符號 |
Pd | 虛線標點符號 |
Pe | 關閉標點符號 |
Pf | 末位標點符號 |
Pi | 首位標點 |
Po | 其他標點符號 |
Ps | 開放標點符號 |
S | symbol |
Sc | 貨幣符號 |
Sk | 修飾詞符號 |
Sm | 數學符號 |
So | 其他符號 |
Z | 分隔符號 |
Zl | 行分隔符號 |
Zp | 段落分隔符號 |
Zs | 空格分隔符號 |
Unicode 字元類名 -- 指令碼 |
---|
Adlam 文 |
阿洪姆語 |
Anatolian_Hieroglyphs |
阿拉伯文 |
亞美尼亞文 |
阿維斯塔文 |
峇里文 |
巴姆文 |
Bassa_Vah |
巴塔克文 |
孟加拉文 |
拜克舒基文 |
注音符號 |
婆羅米文 |
點字 |
布吉斯文 |
布錫語 |
Canadian_Aboriginal |
卡里亞文 |
Caucasian_Albanian |
查克馬文 |
Cham |
卻洛奇文 |
花剌子模語 |
通用 |
科普特語 |
楔形文字 |
賽普勒斯 |
西里爾文 |
德瑟列特文 |
梵文字母 |
Dives_Akuru |
Dogra 文 |
杜普雷速记 |
Egyptian_Hieroglyphs |
艾巴申語 |
埃利邁文 |
衣索比亞文 |
喬治亞文 |
格來哥利蒂克文 |
歌德 |
古蘭塔文 |
希臘文 |
古吉拉特文 |
Gunjala_Gondi |
果魯穆奇文字 |
漢語 |
諺文 |
Hanifi_Rohingya |
漢奴勞族文 |
哈特拉文 |
希伯來文 |
平假名 |
Imperial_Aramaic |
已繼承 |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
爪哇文 |
凱提體文 |
坎那達文 |
片假名 |
Kayah_Li |
佉盧文 |
Khitan_Small_Script |
高棉文 |
郝吉文 |
信德文 |
寮文 |
拉丁文 |
雷布查文 |
林布文 |
Linear_A |
Linear_B |
栗粟文 |
呂西亞文 |
利底亞文 |
馬哈加尼文 |
瑪加沙文 |
馬來亞拉姆文 |
曼底克文 |
摩尼文 |
Marchen 文 |
Masaram_Gondi |
梅德法伊德林文 |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
苗文 |
Modi 文 |
蒙古文 |
姆諾文 |
Multani 文 |
緬甸 |
納巴泰文 |
南迪城文 |
New_Tai_Lue |
Newa 文 |
西非書面文字 |
女書 |
Nyiakeng_Puachue_Hmong |
歐甘字母 |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
奧里亞語 |
奧賽治文 |
奧斯曼亞文 |
Pahawh_Hmong |
帕爾邁拉文 |
Pau_Cin_Hau |
Phags_Pa |
腓尼基文 |
Psalter_Pahlavi |
拉讓文 |
盧恩文 |
撒馬利亞文 |
紹拉斯徹文 |
沙拉達文 |
蕭伯納文 |
悉曇文 |
手語書寫 |
僧伽羅文 |
粟特文 |
Sora_Sompeng |
索永布文 |
巽丹文 |
Syloti_Nagri |
敘利亞文 |
他加祿語 |
塔班瓦語 |
Tai_Le |
Tai_Tham |
Tai_Viet |
塔卡里文 |
坦米爾文 |
西夏語 |
特拉古文 |
塔安那文 |
泰文 |
藏文 |
提弗納文 |
底羅仆多文 |
烏加里特語 |
范文 |
Wancho 語 |
Warang_Citi |
亞茲迪文 |
彝文 |
Zanabazar_Square |
Vim 字元類別 | |
---|---|
\i | 識別碼字元 FF (不支援) VIM |
\I | \i 排除數字 (不支援) VIM |
\k | 關鍵字字元 FF (不支援) VIM |
\K | \k 排除數字 (不支援) VIM |
\f | 檔案名字元 (不支援) VIM |
\F | \f 排除數字 (不支援) VIM |
\p | 可列印字元 (不支援) VIM |
\P | \p 排除數字 (不支援) VIM |
\s | 空格字元 (≡ [\t]) (NOT SUPPORTED) VIM |
\S | 非空格字元 (≡ [^ \t]) (NOT SUPPORTED) VIM |
\d | 数位 (≡ [0-9]) VIM |
\D | 非 \d VIM |
\x | 十六進位數位 (≡ [0-9A-Fa-f]) (NOT SUPPORTED) VIM |
\X | 非 \x (不支援) VIM |
\o | 八進位數位 (≡ [0-7]) (不支援) VIM |
\O | 非 \o (不支援) VIM |
\w | 文字字元 VIM |
\W | 非 \w VIM |
\h | 文字字元標題 FF (不支援) VIM |
\H | 非 \h (不支援) VIM |
\a | 字母 \o (不支援) VIM |
\A | 非 \a (不支援) VIM |
\l | 小寫 (不支援) |
\L | 非小寫 (不支援) VIM |
\u | 大寫 (不支援) |
\U | 非大寫 (不支援) VIM |
_x | \x 和分行符號,適用于任何 x (不支援) VIM |
\c | 忽略大小寫 (不支援) VIM |
\C | 符合大小寫 (不支援) VIM |
\m | 魔術 (不支援) VIM |
\M | 非魔術 (不支援) VIM |
\v | 超魔術 (不支援) VIM |
\V | 超非魔術 (不支援) VIM |
\Z | 忽略 Unicode 結合字元中的差異 (不支援) VIM |
魔術 | |
---|---|
(?{code}) | 任意 Perl 代碼 (不支援) PERL |
(??{code}) | 已延遲任意 Perl 代碼 (不支援) PERL |
(?n) | 對 regexp 擷取群組 n 的遞迴撥號 (不支援) |
(?+n) | 遞迴呼叫相關群組 +n (不支援) |
(?-n) | 遞迴呼叫相關群組 -n (不支援) |
(?C) | PCRE 圖說文字 (不支援) PCRE |
(?R) | 對整個 regexp 的遞迴撥號 (≡ (?0)) (不支援) |
(?&名稱) | 遞迴呼叫具名群組 (不支援) |
(?P=name) | 具名反向參考 (不支援) |
(?P>name) | 遞迴呼叫具名群組 (不支援) |
(? (cond) true|false) | 條件式分支 (不支援) |
(?(cond)true) | 條件式分支 (不支援) |
(*接受) | 讓 regexps 更像 Prolog (不支援) |
(*COMMIT) | (不支援) |
(*F) | (不支援) |
(*FAIL) | (不支援) |
(*MARK) | (不支援) |
(*PRUNE) | (不支援) |
(*SKIP) | (不支援) |
(*THEN) | (不支援) |
(*ANY) | 設定分行符號慣例 (不支援) |
(*ANYCRLF) | (不支援) |
(*CR) | (不支援) |
(*CRLF) | (不支援) |
(*LF) | (不支援) |
(*BSR_ANYCRLF) | 設定 \R 慣例 (不支援) PCRE |
(*BSR_UNICODE) | (不支援) PCRE |
內容授權
注意
本頁的某些部分是根據 Chromium.org 創造和分享的作品加以修改,並根據創用 CC 姓名標示 4.0 國際版本授權條款中所述條款加以使用。 原始頁面可在此處找到。
本作品根據創用 CC 姓名標示 4.0 國際版本授權條款獲得授權。