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?
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?
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 \\'
và \
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
.
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
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 ...
Đó 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"
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
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
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 ...
tôi sửa câu trả lời của tôi – marcgg
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. –
Không, nó là mã thoát, nhưng không phải là SQL. – Earlz