2010-02-01 46 views
24

Tôi không hiểu những gì đang xảy ra ở đây. Làm thế nào tôi nên ăn gsub để có được chuỗi "Yaho \ 'o"?Ruby gsub không thoát khỏi các dấu nháy đơn

>> "Yaho'o".gsub("Y", "\\Y") 
=> "\\Yaho'o" 
>> "Yaho'o".gsub("'", "\\'") 
=> "Yahooo" 
+1

Đây là một trong những điều tôi thấy thú vị hơn. –

Trả lời

27

\ 'có nghĩa là $' là mọi thứ sau trận đấu. Thoát khỏi \ một lần nữa và nó hoạt động

"Yaho'o".gsub("'", "\\\\'") 
+5

ruby ​​1.9.3 '" Yaho'o ".gsub (" '"," \\\\ ") =>" Yaho \\' o "' –

+1

Không hoạt động .... Xem ở trên nhận xét – theSociableme

+2

@AdrienSchuler Công cụ này hoạt động, IRB hiển thị dấu gạch chéo ngược kép để bạn có thể thấy rằng dấu gạch chéo bị thoát. '" Yaho'o ".gsub (" '"," \\\\ ""). Length => 7' –

2
"Yaho'o".gsub("'", "\\\\'") 

Bởi vì bạn đang thoát khỏi nhân vật chạy thoát cũng như thoát khỏi dấu nháy đơn.

1

Điều này cũng sẽ làm điều đó, và đó là một chút dễ đọc hơn:

def escape_single_quotes(str) 
    str.gsub(/'/) { |x| "\\#{x}" } 
end 

Nếu bạn muốn thoát khỏi cả một đơn báo giá và một dấu chéo ngược, vì vậy bạn có thể nhúng chuỗi đó vào chuỗi ruby ​​được trích dẫn kép, sau đó, chuỗi sau sẽ thực hiện điều đó cho bạn:

def escape_single_quotes_and_backslash(str) 
    str.gsub(/\\|'/) { |x| "\\#{x}" } 
end 
+0

Tôi đã sử dụng ứng dụng hàng đầu và hoạt động hoàn hảo. chính xác những gì tôi cần. – nfriend21

Các vấn đề liên quan