タグの削除に問題が\n
あります。\r
二重引用符を使用している場合は正常に機能し、それ以外の場合はそのままになり"\"
ます。ではgsub
、二重引用符がないとまったく機能しません。なんで?
"Remove \n".delete('\n') # result: "Remove"
'Remove \n'.delete('\n') # result: "Remove \"
データベースからの結果では機能しないため、これを見つけました。
タグの削除に問題が\n
あります。\r
二重引用符を使用している場合は正常に機能し、それ以外の場合はそのままになり"\"
ます。ではgsub
、二重引用符がないとまったく機能しません。なんで?
"Remove \n".delete('\n') # result: "Remove"
'Remove \n'.delete('\n') # result: "Remove \"
データベースからの結果では機能しないため、これを見つけました。
単一引用符で囲まれた文字列は、ほとんどのエスケープ シーケンスを処理しません。だから、あなたがこれを持っているとき
'\n'
文字通り、「最初の文字がバックスラッシュで、2 番目の文字が小文字の 'n' である 2 文字の文字列」を意味します。「改行文字」という意味ではありません。が改行文字を意味するため\n
には、二重引用符で囲まれた文字列の中に入れる必要があります (これはこのエスケープ シーケンスを処理します)。以下にいくつかの例を示します。
"Remove \n".delete('\n') # => "Remove \n" # doesn't match
'Remove \n'.delete('\n') # => "Remove \\" # see below
'Remove \n'.delete("\n") # => "Remove \\n" # no newline in source string
"Remove \n".delete("\n") # => "Remove " # properly removed
delete
メソッドの特別なロジックのため、この特定の例 (2 行目、呼び出しで単一引用符で囲まれた文字列を使用) のバックスラッシュ文字は単純に無視されることに注意delete
してください。詳細については、 String#countのドキュメントを参照してください。これを回避するgsub
には、たとえばを使用します。
'Remove \n'.gsub('\n', '') # => "Remove "
一重引用符は、2 つのエスケープ シーケンスのみをサポートします。
\' – single quote \\ – single backslash
これら 2 つのエスケープ シーケンスを除いて、一重引用符で囲まれたものはすべて文字どおりに扱われます。
したがって\n
、irb を入力すると、 が返され\\n
ます。
これがあなたが問題を抱えている理由ですdelete
"Remove \n".delete('\n') #=> "Remove \n".delete("\\n") => "Remove \n"
'Remove \n'.delete('\n') #=> "Remove \\n".delete("\\n") => "Remove \\"