2013-06-04 34 views
4

我剛將一箇舊項目升級到Ruby 1.9.3。我在使用unicode字符串時遇到了一些麻煩。它歸結爲:Ruby 1.9正則表達式中的Unicode轉義

p = "\\username"; "Any String".match(/#{p}/) 

在1.8中工作,並返回爲預期的零。然而,在1.9它拋出:

ArgumentError: invalid Unicode escape 

我想匹配'\u'在一個字符串。我認爲這兩個反斜槓將避免註冊爲unicode。

我在這裏錯過了什麼?

編輯:單引號不要工作太:

1.9.3p429 :002 > p = '\\username'; "Any String".match(/#{p}/) 
ArgumentError: invalid Unicode escape 
from (irb):2 

回答

3

當你做/#{p}/這意味着p將被解釋爲正則表達式。由於您現在p等於\username,那麼這個正則表達式編譯失敗(因爲它是一個無效的Unicode轉義序列):

>> Regexp.new "\\username" 
RegexpError: invalid Unicode escape: /\username/ 

即做/#{p}/等於寫作/\username/

因此,你必須從任何的正則表達式逃脫p所以它會被正確解釋:

"Any String".match(/#{Regexp.escape(p)}/) 

或者只是:

"Any String".match(Regexp.escape(p)) 
+0

工程。謝謝 – user2450763

+0

工作就像一個魔術。非常感謝!! :) – shivam