パターンの中の空白やコメントを無視する(/x修飾子)

パターンで「/x修飾子」を指定すると、パターンの中の空白やコメントを無視してマッチが行われます。ここでは Ruby の正規表現で利用可能な「/x修飾子」の使い方について解説します。

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

パターンの中の空白やコメントを無視する

/x 修飾子を指定するとパターン内の空白が無視されます。書式は次の通りです。

/パターン/x

具体的な例で考えてみます。パターン内の空白が無視されるというのはどういうことかというと、パターン内に空白や改行を追加してもパターンに影響が無いということになります。

/(red|blue)(point|line)/x
/(red|blue)     (point|line)/x
/(red|blue)
 (point|line)/x

上記はどのパターンも同じ文字列にマッチします。パターン内の空白や改行は無視されるためです。

また /x 修飾子では空白が無視されると同時に # から行末までが無視されます。この事を利用して複雑なパターンを改行し、各行毎にコメントを記述することが可能になります。

/
 (red|blue)    # 赤 or 青
 (point|line)  # 点 or 線
/x

# から行末までは無視されるため、 # のあとにコメントなどを記述することが可能になります。

なお、 /x 修飾子を付けると空白と # が無視されてしまうので、空白と # をパターン内で使用する場合には \ を使ってエスケープする必要があります。

/\ /x
/\#/x
サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

def check(str)
  reg = /(
           (
             \d   #任意の数字
             +    #1回以上繰り返し
           )
           (
             yen  #yenで終わる
           )
         )
        /x

  if reg =~ str then
    puts("○" + str + "(" + $1 + ")")
  else
    puts("×" + str)
  end
end

puts("/((\d+)(yen))/x にマッチするかどうか")

check("Watch 3500yen")
check("Apple 280yen")
check("1350year")

下記のように実行して下さい。

パターンの中の空白やコメントを無視する(/x修飾子)

-- --

Ruby の正規表現で利用可能な「/x修飾子」の使い方について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

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