Próbuję dowiedzieć się, jak zastąpić cytat taki jak '
z czymś takim jak \'
.Zamień "na " w Ruby?
Jak to zrobić?
Próbowałem
"'".gsub("'","\\'")
ale to daje pusty ciąg. Co ja tu robię źle?
Próbuję dowiedzieć się, jak zastąpić cytat taki jak '
z czymś takim jak \'
.Zamień "na " w Ruby?
Jak to zrobić?
Próbowałem
"'".gsub("'","\\'")
ale to daje pusty ciąg. Co ja tu robię źle?
Jak o tym
puts "'".gsub("'","\\\\'")
\'
Powodem jest to, że \'
oznacza Pomeczowe w gsub (regex) i ze względu na to, że potrzebuje aby uciec z \\'
i \
ewidentnie uciekł jako \\
, kończąc na \\\\'
.
Przykład
>> "abcd".gsub("a","\\'")
=> "bcdbcd"
a
otrzymuje się późniejszej a
.
Dziękuję za wyjaśnienie tego dla mnie .. Zgaduję, że gsub ma tylko ukryte "cechy" – Earlz
Jak o zrobieniu tego:
"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")
Nie dość, ale myślę, że to działa ...
To może być błąd .. Albo przynajmniej, coś, co łamie mi idea zasada najmniejszej niespodzianki.
irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
Tak, to jest nie ma sensu dla mnie .. na pewno mógłbym użyć do tego celu regex, ale to wydaje się przesadą. – Earlz
Zmienna $'
to ciąg po prawej stronie dopasowania. W łańcuchu zamiennym gsub
ta sama zmienna byłaby \'
- stąd problem.
x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect # foo'foo
To powinno działać:
x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
podejście dwuetapowe mam faktycznie używane ...
BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"
będzie działać tylko wtedy „¤” nie jest używany w tekście oczywiście ...
edytowany moja odpowiedź – marcgg
Mam nadzieję, że nie próbujesz uniknąć wejścia SQL. Zawsze "przygotuj" swoje oświadczenia. –
Nie, to kod ucieczkowy, ale nie SQL. – Earlz