根據this reference,有兩個轉義序列\n
和\num
其中n
是一個八進制數,並且num
是一個正整數。前者是轉換爲字符的轉義值,後者是後向引用。曖昧正則表達式逃逸 NUM
難道這不明確嗎?正則表達式如何區分它們?它什麼時候決定使用另一個?
根據this reference,有兩個轉義序列\n
和\num
其中n
是一個八進制數,並且num
是一個正整數。前者是轉換爲字符的轉義值,後者是後向引用。曖昧正則表達式逃逸 NUM
難道這不明確嗎?正則表達式如何區分它們?它什麼時候決定使用另一個?
是的,這是不明確的。但是如果你通過MSDN文檔here它解釋它是如何解決:
注八進制轉義碼之間的模糊性(如\ 16)和\數反向引用使用相同的符號。這種歧義解決如下:
表達式\ 1到\ 9總是被解釋爲反向引用,而不是八進制代碼。
如果multidigit表達式的第一個數字是8或9(如\ 80或\ 91),則表達式將被解釋爲文字。
如果存在與該數字相對應的反向引用,則來自\ 10和更大的表達式被視爲反向引用;否則,它們被解釋爲八進制代碼。
如果正則表達式包含對未定義組編號的反向引用,則會發生解析錯誤,並且正則表達式引擎會引發ArgumentException。
對於兩個元素都有相同的語法是一個愚蠢的選擇,因爲如果您不遵循這個精確的參考來解決歧義問題,那麼您可以生成奇怪的錯誤。
是的,它是不明確的。我會冒昧地解釋歧義,贊成將其解釋爲反向引用。如果真正需要八進制數,則始終可以使用0
作爲前綴。
消歧規則中http://msdn.microsoft.com/en-us/library/thwdfzxy.aspx描述:
注八進制轉義碼之間的模糊性(例如\16
)和使用相同的符號\number
反向引用。
表達\1
通過\9
總是解釋爲反向引用,而不是八進制代碼:這種不確定性如下解決。
如果多位數表達式的第一個數字是8或9(如\80
或\91
),則表達式將被解釋爲文字。
如果存在與該數字相對應的反向引用,則將來自\10
以及更大的表達式視爲反向引用;否則,它們被解釋爲八進制代碼。
如果正則表達式包含對未定義組編號的反向引用,則會發生解析錯誤,並且正則表達式引擎會拋出ArgumentException。
我認爲它試圖匹配反向引用,如果失敗,它會嘗試一個八進制數匹配。
http://msdn.microsoft.com/en-us/library/1400241x%28VS.85%29.aspx
我也這麼認爲,但顯然這不完全正確。例如,`\ 7`將永遠被視爲反向引用,無論它是否存在(如果我正確讀取它)。 – mpen 2010-11-25 10:00:29