閱讀英文

共用方式為


規則運算式 2 (re2.h) 語法

規則運算式是描述字元字串集的標記法。 當字串位於正則表示式所描述的集合中時,我們假設正則表示式 符合 字串。

最簡單的規則運算式是單一常值字元。 除*+?()|以外的元字元,字元與其本身相符。 若要比對中繼字元,請使用反斜杠將它逸出。 例如, \+ 會比對常值加號字元。

兩個正則表達式可以改變或串連以形成新的正則表達式:如果 e1 符合 se2 符合 t則 e1 | e2 符合 st,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})
Perl 字元類 (全為 ASCII)
\d 位數 (≡ [0-9])
\D 非位數 (≡ [^0-9])
\s 空格 (≡ [\t\n\f\r])
\S 非空格 (≡ [^\t\n\f\r])
\w 文字字元 (≡ [0-9A-Za-z_])
\W 非文字字元 (≡ [^0-9A-Za-z_])
\h 水平空間 (不支援)
\H 非水平空間 (不支援)
\v 垂直空間 (不支援)
\V 非垂直空間 (不支援)
ASCII 字元類別
[[:alnum:]] 英數字元 (≡ [0-9A-Za-z])
[[:alpha:]] 字母 (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] 空白(≡ [\t])
[[:cntrl:]] 控制項 (≡ [\x00-\x1F\x7F])
[[:d igit:]] 位數 (≡ [0-9])
[[:graph:]] 圖形化 (≡ [!-~][A-Za-z0-9!&quot;#$%&amp;&#39;()\*+,\-./:;&lt;=&gt;?@[\\\]^_` {\|}~])
[[:lower:]] 小寫 (≡ [a-z])
[[:print:]] 可列印 (≡ [-~] ≡ [[:graph:]])
[[:punct:]] 標點符號 (≡ [!-/:-@[-`{-~])
[[:space:]] 空格 (≡ [\t\n\v\f\r])
[[:upper:]] 大寫 (≡ [A-Z])
[[:word:]] 文字字元 (≡ [0-9A-Za-z_])
[[:xdigit:]] 十六進位數位 (≡ [0-9A-Fa-f])
  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 國際版本授權條款中所述條款加以使用。 原始頁面可在此處找到。

Creative Commons 授權
本作品根據創用 CC 姓名標示 4.0 國際版本授權條款獲得授權。

請參閱