正規表現でバックスラッシュをエスケープする方法

文字列タイトルを「T8/2024」から「T9/2024」に置き換えたいです。

トピック: 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

しかし、エラーが発生しました:

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

置き換えたい単語に「/」文字が含まれている場合、どのように処理すればよいですか?

これは機能するかどうかはすぐにはわかりません。

「T8」のみを「T9」に置き換えたいのであれば。すべてのスラッシュを削除してテストしてみてはどうでしょうか?

構文エラーでは、引用符が不足していることが示されています。

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

不足している引用符を修正したものを試してみてはどうでしょうか。

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

\でエスケープします。

[1] pry(main)> 'A title covering T8/2024'.gsub(/T8\/2024/, 'T9/2024')
=> "A title covering T9/2024"
「いいね!」 6

すべて順調です。本当にありがとうございます :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 "おっと、何かが壊れました。"
  end
end
「いいね!」 1

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