Let's GAWK! とにかく使うJGAWK その19

 みなさん こんにちわ
 連想配列にはまだいろいろ使い道があるのですが、先へ進みましょう。最後の大物が「正規表現 Regular Expression」です。

正規表現

 正規表現は「データ(の特徴)を記述する」ための方便です。正規表現がなくても、ある程度データの特徴を記述する方法はあります。例えば、第1フィールドのデータが空か否か、0か非0か、特定の文字列と一致するかなどは、それぞれ次のように表現できます。

  $1 == ""
  $1 == 0
  $1 == "特定の文字列"

 しかし、これだけではもっと幅広いパターン、例えば第1フィールドが数字、レコードが3桁の数字で始まっている、あるフィールドが半角アルファベット3個と数字数字5個など、は表現できません。これを可能にするのが「正規表現」です。

 正規表現は、実はみんみんネットでは既に紹介済みです。awkでは少し拡張されて便利になっています。

  .       改行以外の任意の一文字
  r*      正規表現rの0回以上の繰り返し
  r+      正規表現rの1回以上の繰り返し
  r?      正規表現rの0回か1回の繰り返し
  ^       文頭
  $       文末
  [abc]   abcの任意の一文字を含む文字列(キャラクタクラス)
  [^abc]  abcと改行以外の任意の文字(キャラクタクラスの否定)
  (r)     正規表現のグルーピング

 実際の表現は、いろいろな例でもって体得していただくしかないでしょう。

任意の文字列                     .*
数字1文字                        [0-9]
数字3文字                        [0-9][0-9][0-9]
数字の繰り返し                   [0-9]+
数字以外の文字                   [^0-9]
半角アルファベット               [a-zA-Z]
半角アルファベットの繰り返し     [a-zA-Z]+
NIFTYのID                        [A-Z][A-Z][A-Z][0-9][0-9][0-9][0-9][0-9]
空行(改行のみの行)             ^$
先頭に1個以上の半角空白を含む行  ^ +.*
ホームページのタイトル行         ^[0-9][0-9][0-9] +\[
                                 (「先頭に数字が3つ、このあと1つ以上
                                 の半角空白をはさんで[がある行」の意味
                                 です)

 awkではいろいろなところに正規表現が使えます。正規表現は「式」として扱われ、表現があっていれば(マッチすれば)式の値が真になります。

 例によって、具体例は次回です。



 初出 NIFTY-Serve「みんみんネット」1996/09/28 (Sat) 12:55:35