0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Regexp#escape

Posted at

バックスラッシュ記法を有効にさせずに特殊文字を表示させる

escape(string) -> String
quote(string) -> String

概要

string の中で正規表現において特別な意味を持つ文字の直前にエスケープ文字(バックスラッシュ)を挿入した文字列を返します

パラメータ

[PARAM] string:
正規表現において特別な意味をもつ文字をもつ文字列を指定します。

irb(main):009> rp = Regexp.escape("$bc^")
irb(main):010> p rp
"\\$bc\\^"
=> "\\$bc\\^"

irb(main):013> rp = Regexp.new("$bc^")
=> /$bc^/

irb(main):086> p = Regexp.escape("bc^")
=> "bc\\^"
irb(main):087> p = Regexp.escape("$bc^")
=> "\\$bc\\^"
irb(main):088> p = Regexp.escape("bc^")
=> "bc\\^"
irb(main):089> p = Regexp.escape("bc")
=> "bc"

\を追加してエスケープしないようにしている

irb(main):094> puts "faafa\nfaaf"
faafa
faaf
=> nil
irb(main):095> p "faafa\nfaaf"
"faafa\nfaaf"
=> "faafa\nfaaf"
irb(main):096> a = Regexp.escape("faafa\nfaaf")
=> "faafa\\nfaaf"
irb(main):097> p a
"faafa\\nfaaf"
=> "faafa\\nfaaf"
irb(main):098> puts a
faafa\nfaaf
=> nil

シングルクォートだとバックスラッシュ記法と式展開が有効にならない

文字列はダブルクォートまたはシングルクォートで囲まれています。ダブルクォートで囲まれた文字列ではバックスラッシュ記法と式展開(後述)が有効になります。シングルクォートで囲まれた文字列では、 \\ (バックスラッシュそのもの)と \' (シングルクォート) を除いて文字列の中身の解釈は行われません。シングルクォートで囲まれた文字列では行末の \ は \ そのものとして解釈されます。

複数行にわたって書くこともできます。この場合含まれる改行文字は常に\nになります。実際のソースファイルの改行コードとは無関係です。

空白を間に挟んだ文字列リテラルは、コンパイル時に1つの文字列リテラルと見倣されます。

\\ (バックスラッシュそのもの)と \' (シングルクォート) を除いて文字列の中身の解釈は行われません

irb(main):101> puts 'faafa\nfaaf'
faafa\nfaaf
=> nil
irb(main):102> puts "faafa\nfaaf"
faafa
faaf
=> nil
irb(main):103> puts '\\'
\
=> nil
irb(main):104> puts '\''
'
=> nil

感想

エスケープするとは特殊文字を有効にしない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?