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

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

(2021 年 06 月 30 日公開 / 2022 年 10 月 12 日更新)

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

パターンの文字コードはソースコードの文字コードと同じであると見なされます。ただし正規表現が 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

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。