Escaping di una backslash in una regex

Voglio sostituire la stringa del titolo da “T8/2024” a “T9/2024”

dal topic How to replace a string/character in topic title? - #11 by pfaffman

Topic.where("title LIKE '%T8/2024%'").find_each do |topic|
  topic.title.gsub!(/T8\/2024/,"T9/2024")
  topic.fancy_title.gsub!(/T8\/2024/,"T9/2024")
  topic.slug.gsub!(/T8\/2024/,"T9/2024")
  puts topic.title
  begin
    topic.save!
  rescue
    puts "oops, something broke."
  end
end

Ma ottengo un errore:

SyntaxError: unexpected integer literal, expecting ')'
  topic.title.gsub!(/T8/2024/,"T9/2024")
                        ^~~~

Se la parola che vuoi sostituire ha il carattere “/”, come dovremmo gestirla?

Non so al momento se questo funzionerebbe o meno

Dato che vuoi sostituire solo “T8” con “T9”. Forse rimuovi tutte le barre e prova?

Nel tuo errore di sintassi mostra che mancano le virgolette

SyntaxError: unexpected integer literal, expecting ')'
  topic.title.gsub!(/T8/2024/,\"T9/2024\")
                        ^~~~

Forse prova queste virgolette mancanti corrette

Topic.where("title LIKE '%T8/2024%'").find_each do |topic|
  topic.title.gsub!("T8/2024","T9/2024")
  topic.fancy_title.gsub!(/T8/2024","T9/2024")
  topic.slug.gsub!("T8/2024","T9/2024")
  puts topic.title
  begin
    topic.save!
  rescue
    puts "oops, something broke."
  end
end

Rimosse anche le barre aggiuntive “/”

1 Mi Piace

Eseguine l’escape con \:

[1] pry(main)> 'A title covering T8/2024'.gsub(/T8\/2024/, 'T9/2024')
=> "A title covering T9/2024"
6 Mi Piace

Tutto liscio. Grazie mille, :slight_smile:

Topic.where("title LIKE '%T8/2024%'").find_each do |topic|
  topic.title.gsub!("T8/2024","T9/2024")
  topic.fancy_title.gsub!("T8/2024","T9/2024")
  topic.slug.gsub!("T8/2024","T9/2024")
  puts topic.title
  begin
    topic.save!
  rescue
    puts "ops, qualcosa si è rotto."
  end
end
1 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.