2010-02-15 27 views
14

Tôi đang cố gắng tìm cách thay thế báo giá như ' bằng một cái gì đó như \'.Thay thế 'bằng ' trong Ruby?

Tôi làm như thế nào?

Tôi đã thử

"'".gsub("'","\\'") 

nhưng nó chỉ cung cấp cho một chuỗi rỗng. Tôi làm gì sai ở đây?

+0

tôi sửa câu trả lời của tôi – marcgg

+0

Tôi hy vọng bạn không cố gắng thoát khỏi đầu vào SQL. Luôn luôn 'chuẩn bị' báo cáo của bạn. –

+0

Không, nó là mã thoát, nhưng không phải là SQL. – Earlz

Trả lời

27

Làm thế nào về vấn đề này

puts "'".gsub("'","\\\\'") 
\' 

Lý do là \' nghĩa sau trận đấu trong gsub (regex) và vì lý do đó nó cần được thoát với \\'\ rõ ràng là được thoát là \\, kết thúc bằng \\\\'.

Ví dụ

>> "abcd".gsub("a","\\'") 
=> "bcdbcd" 

a được thay thế bằng tất cả mọi thứ sau a.

+0

Cảm ơn bạn đã giải thích cho tôi .. Tôi đoán gsub chỉ có một số "tính năng" ẩn – Earlz

-1

Làm thế nào về việc này:

"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'") 

Không đẹp, nhưng tôi nghĩ rằng nó hoạt động ...

+0

Phiên bản phá hoại không hoạt động. chỉ trả lại một chuỗi trống từ dấu nhắc irb – Earlz

+0

Ok hãy để tôi xem qua nó – marcgg

+0

Phiên bản Ruby là 'ruby 1.8.6 (2009-06-08 patchlevel 369) [x86_64-openbsd4.6] ' – Earlz

0

Đó có thể là một lỗi .. Hoặc ít nhất, một cái gì đó mà phá vỡ ý tưởng của tôi về nguyên tắc ít ngạc nhiên nhất.

irb(main):039:0> "life's grand".gsub "'", "\\\'" 
=> "lifes grands grand" 
irb(main):040:0> "life's grand".gsub "'", "\\\\'" 
=> "life\\'s grand" 
+0

Vâng, đây là không có ý nghĩa với tôi .. chắc chắn tôi có thể sử dụng regex cho nó, nhưng điều đó có vẻ như quá mức cần thiết. – Earlz

2

Biến số $' là chuỗi ở bên phải của trận đấu. Trong chuỗi thay thế gsub, biến số tương tự sẽ là \' - do đó có vấn đề.

x = "'foo'" 
x.gsub!(/'/, "\\'") 
puts x.inspect  # foo'foo 

này nên làm việc:

x = "'foo'" 
x.gsub!(/'/, "\\\\'") 
puts x.inspect 
puts x 
0

Một cách tiếp cận hai bước Tôi đã thực sự được sử dụng ...

BACKSLASH = 92.chr 
temp = "'".gsub("'", "¤'") 
puts temp.gsub("¤", BACKSLASH) 
=> "\'" 

Sẽ chỉ làm việc nếu '¤' không được sử dụng trong văn bản rõ ràng ...

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