正規表現オブジェクトの文字コードを指定する

パターンはデフォルトではソースコードの文字コードと同じであるとみなされますが、パターンに対して明示的に文字コードを指定して作成することもできます。ここでは Ruby の正規表現で正規表現オブジェクトに対して文字コードを指定する方法について解説します。

(Last modified: )

正規表現オブジェクトの文字コードの指定

パターンの文字コードはソースコードの文字コードと同じであると見なされます。ただし正規表現が ASCII 互換の文字しか含まない場合はエンコーディングは US-ASCII になります。パターンだけに別の文字コードを指定したい場合は次のように正規表現オブジェクトを作成します。

/パターン/文字コード

文字コードとして指定可能な値は次のいずれかです。

"N" or "n"    # None
"E" or "e"    # EUC-JP
"S" or "s"    # Shift_JIS(Windows-31J)
"U" or "y"    # UTF-8

例えばパターンの文字コードとして Shift_JIS を使用する場合は次のようにパターンを作成します。

/パターン/s

これでパターンの文字コードが Shift_JIS としてマッチングが行われます。

Regexp.newメソッドを使って正規表現オブジェクトを作成する場合

Regexp クラスのクラスメソッドである new メソッド又は compile メソッドを使って正規表現オブジェクトを作成することも可能です。

Regexp.new(string[, option[, code]])

この時、 3 番目の引数で使用する文字コードを指定することができます。文字コードとして指定できる値は先ほどと同じです。例えば文字コードに UTF-8 を指定する場合は次のように記述します。

Regexp.new("パターン文字列", nil, "u")

3 番目の引数を指定する場合は 2 番目の引数を省略できません。2 番目の引数であるオプションに何も指定しない場合は nil を指定して下さい。

-- --

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。