- Home ›
- Ruby入門 ›
- Ruby正規表現の使い方
正規表現パターンの中のエスケープ処理
正規表現のパターンの中には任意の文字を記述することができますが、メタ文字と呼ばれる特殊な用途で使用される文字にはエスケープ処理が必要となります。ここでは Ruby で正規表現パターンの中のエスケープ処理を行う方法について解説します。
(Last modified: )
パターンの中のエスケープ処理
エスケープ処理が必要となる文字は次のようなものがあります。
\ * + . ? { } ( ) [ ] ^ $ - | /
これらの文字はパターンの中で使用されると特別な意味を持ちます。そこで単なる文字として扱いたい場合には \ 記号を使ってエスケープ処理を行います。例えば「\」「*」「|」の文字をそれぞれエスケープ処理する場合は次のように記述します。
\\ \* \|
また「-」については [] の中で使用される場合にだけ特別な意味を持つため、 []の中で使用される時だけエスケープ処理が必要となります。
エスケープシーケンス
正規表現オブジェクトのパターンではバックスラッシュ記法を使ったエスケープシーケンスも記述できます。
\t タブ \n 改行 \r キャリッジリターン \f 改ページ \b バックスペース \e エスケープ \s 空白 \nnn 8 進数表記 \xnn 16 進数表記 \cx コントロール文字 (x は ASCII 文字) \C-x コントロール文字 (x は ASCII 文字)
他にも特別な意味を持つエスケープシーケンスが用意されていますが、必要になった時に随時解説していきます。
escapeメソッドを使ったエスケープ処理
Regexp クラスではメタ文字をエスケープした結果を返してくれるクラスメソッドの escpae が用意されています。
Regexp.escape(string)
引数にメタ文字が含まれる文字列を指定します。 escape メソッドは文字列に含まれるメタ文字の前に \ 記号を挿入したものを返してくれます。例えば Regexp.escape(".") は \. を表す文字列 \\. を返します。
escape メソッドで取得した文字列を new メソッド又は compile メソッドの 1 番目の引数に指定して利用します。
Regexp.new(Regexp.escape("a[b]c"))
これは次のように記述した場合と同じです。
Regexp.new("a\\[b\\]c")
/a\[b\]c/
なお escape メソッドのエイリアスとして quote メソッドも用意されています。
Regexp.quote(string[,kcode])
使い方は escape メソッドと同じです。
では簡単なプログラムで確認してみます。
# encoding: UTF-8
puts("変換前:[ab+.c/hp]")
puts("変換後:" + Regexp.escape("[ab+.c/hp]"))
puts()
puts("変換前:/abc?def-ghi")
puts("変換後:" + Regexp.escape("/abc?def-ghi"))
下記のように実行して下さい。
-- --
Ruby で正規表現パターンの中のエスケープ処理を行う方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。