Escape de uma barra invertida em uma regex

Quero substituir a string do título de “T8/2024” para “T9/2024”

do tópico 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

Mas recebo um erro:

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

Se a palavra que você quer substituir tem o caractere “/”, como devemos lidar com isso?

Não sei de imediato se isso funcionaria ou não

Já que você quer substituir apenas “T8” por “T9”. Talvez remover todas as barras e testar?

No seu erro de sintaxe, mostra que faltam aspas

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

Talvez tentar isto com as aspas em falta corrigidas

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, algo quebrou."
  end
end

Também removeu a barra extra “/”

1 curtida

Escape com \\:

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

Tudo está tranquilo. Muito obrigado, :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, algo quebrou."
  end
end
1 curtida

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