- Home ›
- Ruby正規表現の使い方 ›
- 正規表現のオプション修飾子 ›
- HERE
パターンの中の空白やコメントを無視する(/x修飾子)
「/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
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku
require "kconv"
def check(str)
reg = /(
(
¥d #任意の数字
+ #1回以上繰り返し
)
(
yen #yenで終わる
)
)
/x
if reg =~ str then
print(Kconv.tosjis("○") + str + "(" + $1 + ")¥n")
else
print(Kconv.tosjis("×") + str + "¥n")
end
end
print(Kconv.tosjis("/((¥d+)(yen))/x にマッチするかどうか¥n¥n"))
check("Watch 3500yen")
check("Apple 280yen")
check("1350year")
上記のプログラムを「test3-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )
RubyLife