- 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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。