2012-10-15 15 views
9

Ho una stringa comeRuby: come rimuovere le barre retroverse finali da una stringa?

"car\" 

cui sarò memorizzazione in postgres db. Voglio rimuovere il backslash dalla stringa prima di salvare. C'è un modo per farlo in ruby ​​o in postgres? Quando provo a rimuoverlo in ruby, considera la citazione dopo il backslash come un carattere di escape.

+1

Devi raddoppiare il backslash nella stringa di ricerca. –

risposta

24

Vedi seguente codice:

1.9.3p125 :022 > s = "cat\\" 
=> "cat\\" 
1.9.3p125 :023 > puts s 
cat\ 
=> nil 
1.9.3p125 :024 > s.chomp("\\") 
=> "cat" 
1.9.3p125 :025 > 
+0

Il metodo chomp di Ruby è stato progettato per questo scopo. http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp – scarver2

2

Per rimuovere una barra rovesciata finale:

"car\\".gsub!(/\\$/, "") 

Si noti che la barra inversa deve essere sfuggito per sé con una barra inversa.

2

Le persone non fanno molto, ma classe String di Ruby supporta:

irb(main):002:0> str = 'car\\' 
=> "car\\" 
irb(main):003:0> str[/\\$/] = '' 
=> "" 
irb(main):004:0> str 
=> "car" 

Si tratta di una ricerca condizionale per un finale '\', e la sostituzione con una stringa vuota.

+0

Il problema è che la mia app per rotaie riceve una sola barra rovesciata finale dal frontend (erroneamente da un utente) che io necessità di memorizzare nel database. Qualche idea su come affrontare una situazione del genere? – Ari53nN3o

+0

Questo è ciò che l'esempio sta dimostrando. Una singola barra rovesciata finale. 'car \\' crea una stringa contenente una singola barra retroversa finale. La linea finale mostra che il singolo back-swing finale viene rimosso. –

0
puts '"car\"'.gsub(/\\(")?$/, '\1') 

che lo farà, ma , è la barra finale sempre al en seguito da un preventivo?

+0

sì, segue sempre con un preventivo .. – Ari53nN3o

+1

'/ \\ (") * $/'è un modo molto imbarazzante di gestire una possibile citazione finale e in realtà significa" zero o più "virgolette finali –

+0

@the_Tin_Man: hai ragione, voglio dire (") ?, not (") * – thebugfinder

-1

Vedere che cosa dice l'operazione

str.dump 

, e quindi provare a operare su quello.

+0

Cosa succederà se la stringa * non * ha un back-barra finale? –

+0

Certo, avremmo bisogno di sapere come appare questa stringa in dettaglio , quando si tratta di rubino? "\" car \\ "," \ "car \\\" "? – Adam

+0

@theTinMan nella documentazione dice che nil verrà restituito '' 'return str, o nil se non sono state eseguite sostituzioni. Se non viene fornito alcun blocco e nessuna sostituzione, viene invece restituito un enumeratore. '' http://ruby-doc.org/core-2.3.1/String.html – DevJ3rry

Problemi correlati