2012-03-30 18 views
2

Wie würde ich '49' finden und ersetzen, wenn '49' eine unbekannte ID ist, mit Ruby auf Schienen?Ruby Regex Suchen und Ersetzen einer Zahl innerhalb einer Zeichenfolge

str = "select * from clients where client_id = 49 order by registration_date asc" 
str = str.gsub(/someRegExThatFinds49/, replacement_id) # <------ Here's the concept 

Suchen Sie nach einer Syntax und einem Beispiel, das korrekt ist. Vielen Dank.

+1

Größere Frage zurück, warum bearbeiten Sie eine SQL-Zeichenfolge in Schienen? Sie müssen selten sql in Schienen berühren. Welches größere Problem versuchen Sie zu lösen? – DGM

+1

Ein Wort der Warnung - alle Antworten, die ich hier sehe, verwenden 'gsub', das _all_ Vorkommen der Regex in der Zeichenfolge ersetzen wird. Wenn Sie wissen, dass Ihre numerische ID immer die erste Nummer in der Zeichenfolge ist, ist das reguläre "Sub" sicherer, da es nur die erste Übereinstimmung ersetzt. Wenn Ihre ID an einer beliebigen Position sein könnte, möglicherweise mit anderen Nummern davor, sind die Regeln wahrscheinlich nicht das, wonach Sie suchen. Es wäre einfach zu kompliziert. –

+0

DGM, Jeder Client erstellt benutzerdefinierte Berichte, wobei 'str' dynamisch vom Client erstellt und als String in der Datenbank gespeichert wird. Daher enthält die Datenbanktabelle 'report' Hunderte von zugehörigen Datensätzen in 'report_details', die diese SQL-Abfragen enthalten. Ich bin ziemlich neu in Schienen und musste diese Aufzeichnungen unter bestimmten Umständen manipulieren, und nahm diesen Ansatz aufgrund meiner begrenzten Kenntnisse von Schienen. – iamtoc

Antwort

2

Dies funktionieren würde, eine Kopie der Zeichenfolge mit:

new_str = str.gsub(/\d+/, replacement_id) 

Oder, wenn Sie es an Ort und Stelle zu bevorzugen (Modifizieren der String direkt)

str.gsub!(/\d+/, replacement_id) 

ian.

-2
str = str.gsub(/49/, replacement_id) 

Oder nutzen Sie die sich selbst aktualisierende Version:

str.gsub!(/49/, replacement_id) 

Überprüfen Sie auch, Rubular das Ihnen erlaubt, reguläre Ausdrücke zu testen.

+1

Sorry für den Downvote, aber der Punkt der Frage war, eine _arbitrary_ numerische ID zu ersetzen. –

1
unknown_id = 49 
puts "hello4849gone".gsub(/#{unknown_id}/, "HERE") #=> hello48HEREgone 
Verwandte Themen