正規表現の利用方法

広告

まず正規表現をどのような時に使用するのかを簡単に確認しておきます。

例として変数に代入されている文字列オブジェクトが、ある文字列と一致しているかどうかを調べてみます。

str = "Hello"

if str == "Hello" then
  print("文字列はHelloです¥n")
else
  print("文字列はHelloではありません¥n")
end

このサンプルでは変数に格納された文字列と「Hello」と言う文字列が完全に一致しますので「文字列はHelloです」が出力されます。

このように完全に一致しているかどうかを調べるだけならば「==」メソッドを使うことで判定が出来ます。では次に対象の文字列に「e」で始まり「o」で終わる文字列が含まれているかどうかを調べるにはどうすればいいでしょうか。

このような条件ですと、一致する文字列は数限りなく存在します。例えば次のような文字列に一致します。

eo
eao
ebo
eabo
eabao
eabbdddeeebo

正規表現を使わないのであれば、文字列の中に「e」と「o」が含まれているのを確認し「e」の方が先に記述されているかどうかを調べるといった方法でも可能です。ただ今回はこの方法でもいいのですが、また別の条件となった場合には全て記述しなおさなくてはなりません。

このような複雑なパターンも正規表現を使用することで簡潔に定義できます。正規表現を使うと「e」で始まり「o」で終わるパターンは次のように表すことが出来ます。

/e.*o/

パターンが定義できれば、あとは対象の文字列の中にパターンが含まれるかどうかを調べるだけで済みます。詳しい記述方法は次のページ以降で確認していきますが、次のように記述します。

str = "Hello"

if /e.+o/ =~ str then
  print("eで始まりoで終わる文字列が含まれます¥n")
else
  print("eで始まりoで終わる文字列が含まれません¥n")
end

正規表現を使えば、検索する条件が変わった場合でもパターンの定義だけを変更すれば基本的な部分は変わりありません。

正規表現として記述できるパターンは、単なる文字列が含まれているかどうかだけではなく、行頭にある場合に限定したり、指定の文字が1回以上続けて記述されているものなど複雑な条件が指定できるようになっています。では次のページ以降で正規表現の実際の使い方を確認していきます。

サンプルプログラム

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

test1-1.rb

#! ruby -Ku
require "kconv"

str = "Hello"

if /e.+o/ =~ str then
  print(Kconv.tosjis("eで始まりoで終わる文字列が含まれます¥n"))
else
  print(Kconv.tosjis("eで始まりoで終わる文字列が含まれません¥n"))
end

上記のプログラムを「test1-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。

正規表現の利用方法

( Written by Tatsuo Ikura )