7

タグの削除に問題が\nあります。\r二重引用符を使用している場合は正常に機能し、それ以外の場合はそのままになり"\"ます。ではgsub、二重引用符がないとまったく機能しません。なんで?

"Remove \n".delete('\n') # result: "Remove" 
'Remove \n'.delete('\n') # result: "Remove \" 

データベースからの結果では機能しないため、これを見つけました。

4

3 に答える 3

20

単一引用符で囲まれた文字列は、ほとんどのエスケープ シーケンスを処理しません。だから、あなたがこれを持っているとき

'\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 "
于 2013-06-16T10:29:51.417 に答える
2

Ruby プログラミング/文字列から

一重引用符は、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 \\"
于 2013-06-16T10:29:38.060 に答える