2013-05-06 23 views
1

我有以下的文字,我盡力配合並刪除反斜槓和下面的數字:爲什麼gsub和regex爲單引號和雙引號返回不同的結果?

these failings is india\342\200\231s reluctance 

當我創建一個單引號的字符串和使用\\\d+,然後我得到這些字符刪除,但這個文本雙引號返回相同。下面演示了什麼,我想說:

>> "these failings is india\342\200\231s reluctance".gsub(/\\\d+/, "") 
>> "these failings is india\342\200\231s reluctance" 
>> 'these failings is india\342\200\231s reluctance'.gsub(/\\\d+/, "") 
>> "these failings is indias reluctance" 

的原因是什麼,我怎麼能得到這些字符在雙引號去掉呢?

回答

4

你的問題不是與正則表達式,你的問題是與字符串本身。當你這樣說:

"these failings is india\342\200\231s reluctance" 

\342\200\231由字符串解釋這三個字節 3字節八進制,並且是的UTF-8表示;其結果是,你的字符串真的是這樣的:

"these failings is india’s reluctance" 

和這三個字節只是一個UTF-8字符。如果你建立單引號的字符串:

'these failings is india\342\200\231s reluctance' 

那麼八進制轉義序列並不解釋爲八進制字節值,他們只是十二個字:

\ 3 4 2 \ 2 0 0 \ 2 3 1 

,你看在你的編輯器中。

如果你想刪除特定的單引號字符,那麼你可以使用tr正是如此:

"these failings is india\342\200\231s reluctance".tr("\342\200\231", '') 

gsub像這樣(或者各種其他方式):

"these failings is india\342\200\231s reluctance".gsub("\342\200\231", '') 
"these failings is india\342\200\231s reluctance".gsub(/\342\200\231/, '') 

注意,正則表達式文字提供雙引號字符串上下文,因此\nnn將被解釋爲就像它們在雙引號字符串中一樣。

您可能希望查看您的編碼設置,以確保所有內容(包括終端和編輯器)都設置爲使用UTF-8。那會讓問題更清楚。