Échapper à une barre oblique inverse dans une regex

Je veux remplacer la chaîne de titre de “T8/2024” à “T9/2024”

du sujet 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

Mais j’obtiens une erreur :

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

Si le mot que vous voulez remplacer contient le caractère “/”, comment devons-nous le gérer ?

Je ne sais pas à brûle-pourpoint si cela fonctionnerait ou non.

Puisque vous voulez seulement remplacer « T8 » par « T9 ». Peut-être supprimer toutes les barres obliques et tester ?

Dans votre erreur de syntaxe, il est indiqué qu’il manque des guillemets.

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

Peut-être essayer ceci avec les guillemets manquants corrigés :

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

Aussi, j’ai supprimé la barre oblique supplémentaire « / ».

1 « J'aime »

Échappez-le avec \\ :

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

Tout va bien. Merci beaucoup, :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 "oops, something broke."
  end
end
1 « J'aime »

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