BRE與ERE的異同

來源:互聯網
上載者:User

BRE與ERE的異同

POSIX有兩種風格的Regex:基本Regex(BRE)與擴充Regex(ERE)。

下面,來討論一下這兩種Regex之間的異同。

 

meta字元

相同之處:

\              用以關閉後續字元的特殊含義

 

.              匹配任何的單個字元,NUL除外

 

*             匹配在它之前的任何數目的單個字元

 

#             匹配緊接著的Regex,在行或字串的起始處

 

$             匹配前面的Regex,在行或字串的結尾處

 

[…]           匹配括弧內的任一字元

 

相異之處:

\{n,m\}    BRE     區間運算式,匹配在它前面的單個字元重現的次數區間

 

{n,m}      ERE    區間運算式,匹配在它前面的單個字元重現的次數區間

 

\(  \)     BRE    表示子模式,可通過逸出序列來引用(例如\1)

 

(  )      ERE      匹配與括起來的Regex

 

\n       BRE      重複在\(與\)括弧內的第n個子模式。n為1至9的數字。

 

+        ERE      匹配前面Regex的一個或多個執行個體

 

?       ERE      匹配前面Regex的零個或一個執行個體

 

|        ERE      匹配於|符號前或後的Regex

 

^與$僅在BRE的起始與結尾處具有特殊用途。在BRE下,ab^cd裡的^表示的,就是自身的^,並不是meta字元;同樣,ef$gh裡的$在這裡表示的也就是字面上的貨幣符號。然後在ERE裡,^與$永遠是meta字元。所以,像ab^cd與ef$fg這樣的Regex仍是有效,只是無法匹配到任何東西。

 

運算子優先順序

相異之處

BRE的運算子優先順序(由高至低遞減)

[..] [==] [::]             用於字元排序的方括弧符號

 

\metacharacter  轉義的meta字元

 

[]                           方括號運算式

 

\( \)  \digit            子運算式與後向引用

 

*  \{ \}                    前置單個字元重現的Regex

 

無符號                 連續

 

^  $                       錨點

 

 

ERE的運算子優先順序(由高至低遞減)

[..] [==] [::]             用於字元排序的方括弧符號

 

\metacharacter  轉義的meta字元

 

[]                           方括號運算式

 

()                          分組

 

* + ? {}                 重複前置的Regex

 

無符號                 連續

 

^   $                     錨點

 

|                           交替

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.