正規表現

正規表現
メタ文字
練習問題


正規表現

正規表現とは、シェル、grep、awk、perl などで使用するパターン適合のための表記法です。

正規表現 説          明
c メタ文字でない任意の文字 Mon
\c メタ文字は前に'\'を付加すればその文字自身に適合する
メタ文字には、'*'、'?'、'.'、'+'、'\'、'['、']'、'('、')'、'^'、'$'、'|'がある
\\
^ 行頭に適合 ^SunOS
$ 行末に適合 HP\-UX$
. 任意の1文字に適合 .
[S] セット S に含まれる任意の1文字に適合 [a-zA-Z]
[^S] セット S に含まれない任意の1文字に適合 [^a-zA-Z]
[c1-c2] c1 から c2 の任意の1文字に適合 [0-9]
r r に適合する任意の文字列 ^[a-zA-Z_]+$
r1| r2 r1 か r2に適合する任意の文字列 Mon|Tue|Wed|Thu|Fri|Sat
(r1) (r2) r1 に適合し r2に適合する文字列 ([a-zA-Z])([a-zA-Z_0-9]*)
(r)* r に適合する文字列の0個以上の連接 ([a-zA-Z_])*
(r)+ r に適合する文字列の1個以上の連接 ([a-zA-Z_])+
(r)? r に適合する文字列の0または1個の文字列 ([a-zA-Z_])?
(r) r に適合する任意の文字列 ([a-zA-Z_]*)
r{n} r が n 回繰り返す任意の文字列 ([a-zA-Z_]){10}
r{n,} r が n 回以上繰り返す任意の文字列 ([a-zA-Z_]){10,}
r{,m} r が 0 回以上 m 回以下繰り返す任意の文字列 ([a-zA-Z_]){,10}
r{n,m} r が n 回以上 m 回以下繰り返す任意の文字列 ([a-zA-Z_]){1,10}

c = 文字
r = 正規表現文字列
S = セットを表す正規表現
n,m = 数値




.* 任意の文字列
[0-9] 数字1文字
[0-9]{4} 数字4文字
[0-9]+ 数字の繰り返し
[^0-9] 数字以外の1文字
[a-zA-Z] 半角アルファベット1文字
([a-z][A-Z]){2,} 小文字大文字が2回以上繰り返されるパターン
^$ 空行(改行のみの行)
^ +.* 先頭に1個以上の半角空白を含む行
^09:00(.)*oracle 先頭に09:00 を含みかつ途中に oracle を含む行




メタ文字

正規表現を記述するための特殊な意味をもつ文字をメタ文字 (metacharacter) といいます。

メタ文字 説            明
^ 行頭を表す。また [ ] の中で使用された場合は否定を表す。 ^Head
$ 行末を表す Tail$
. 改行以外の任意の1文字を表す [.]
* 0回以上の繰り返しを表す [a-z]*:英小文字 0 以上
+ 1回以上の繰り返しを表す [a-z]+:英小文字 1 以上
? 0回または1回の繰り返しを表す [a-z]?:英小文字 0 か 1
[ ] セットを表す [a-z]+:英小文字 1 以上
( ) 正規表現をグループ化する (a|b):a か b
| 選択を表す (a|b):a か b
\ メタ文字をエスケープする [0\9\.]+:数値

練習問題

コマンド行から入力できる正規表現は限定されていますが、 以下の条件を満たす正規表現を egrep コマンドで試しましょう。
1,2,3,4 は dmp.c dmp.mk を使います。

  1. # で始まる行を抽出しなさい。
  2. このプログラムには for ループはいくつありますか?
  3. 関数の定義はいくつありますか?
  4. 数字だけの単語のある行を抽出しなさい。
  5. regtest のなかの $ のある行を抽出しなさい。
  6. alert.log のなかの日付だけの行を抽出しなさい。


【参考書 】

詳細正規表現    オーム社   5400