Escapar una barra invertida en una expresión regular

Quiero reemplazar la cadena de título de “T8/2024” a “T9/2024”

del tema 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

Pero obtengo un error:

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

Si la palabra que quieres reemplazar tiene el carácter “/”, ¿cómo debemos manejarlo?

No sé de inmediato si esto funcionaría o no.

Dado que solo quieres reemplazar “T8” con “T9”. ¿Quizás eliminar todas las barras diagonales y probar?

En tu error de sintaxis, se muestra que faltan comillas.

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

Quizás intenta esto, con las comillas faltantes corregidas.

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

También se eliminó la barra diagonal “/” extra.

1 me gusta

Escápalo con \:

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

Todo va bien. Muchas gracias, :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 "ups, algo salió mal."
  end
end
1 me gusta

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