2010-11-25 84 views
0

根據this reference,有兩個轉義序列\n\num其中n是一個八進制數,並且num是一個正整數。前者是轉換爲字符的轉義值,後者是後向引用。曖昧正則表達式逃逸 NUM

難道這不明確嗎?正則表達式如何區分它們?它什麼時候決定使用另一個?

回答

2

是的,這是不明確的。但是如果你通過MSDN文檔here它解釋它是如何解決:

注八進制轉義碼之間的模糊性(如\ 16)和\數反向引用使用相同的符號。這種歧義解決如下:

表達式\ 1到\ 9總是被解釋爲反向引用,而不是八進制代碼。

如果multidigit表達式的第一個數字是8或9(如\ 80或\ 91),則表達式將被解釋爲文字。

如果存在與該數字相對應的反向引用,則來自\ 10和更大的表達式被視爲反向引用;否則,它們被解釋爲八進制代碼。

如果正則表達式包含對未定義組編號的反向引用,則會發生解析錯誤,並且正則表達式引擎會引發ArgumentException。

對於兩個元素都有相同的語法是一個愚蠢的選擇,因爲如果您不遵循這個精確的參考來解決歧義問題,那麼您可以生成奇怪的錯誤。

1

是的,它是不明確的。我會冒昧地解釋歧義,贊成將其解釋爲反向引用。如果真正需要八進制數,則始終可以使用0作爲前綴。

4

消歧規則中http://msdn.microsoft.com/en-us/library/thwdfzxy.aspx描述:


注八進制轉義碼之間的模糊性(例如\16)和使用相同的符號\number反向引用。

  • 表達\1通過\9總是解釋爲反向引用,而不是八進制代碼:這種不確定性如下解決。

  • 如果多位數表達式的第一個數字是8或9(如\80\91),則表達式將被解釋爲文字。

  • 如果存在與該數字相對應的反向引用,則將來自\10以及更大的表達式視爲反向引用;否則,它們被解釋爲八進制代碼。

  • 如果正則表達式包含對未定義組編號的反向引用,則會發生解析錯誤,並且正則表達式引擎會拋出ArgumentException