2013-05-06 46 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。那会让问题更清楚。

相关问题