システムプログラム(第0回): 正規表現

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2022/2022-05-18/regexp.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2022/
http://www.coins.tsukuba.ac.jp/~yas/

■正規表現(regular expression)

単純な検索 正規表現の例:「^a.*tion$」。「aで始まり、tionで終わるもの」。

^」、「.」、「*」、「$」 は、 メタキャラクタ。特別の意味を持つ。 メタキャラクタを含まない文字列も、正規表現として意味を持つ。

◆種類

種類
grep系
grep, ed, vi, ex, sed, less (lv)
egrep系
egrep, awk
Emacs
emacs
シェル系
csh, tcsh, sh
その他
Python, Ruby, Apache httpd, ....
シェルの「*,?,[]」などは、単にワイルドカードではなく、正規表現に 近い。複数の場所に「*」が書けるので、単なるワイルドカードではな い。

◆grep系の正規表現

grep は、文字列を検索するコマンド。

grep使われている正規表現

\
続く文字(メタキャラクタ)の意味をなくす
^
行の先頭。([]の中で使われたときには否定の意味)
$
行の終わり
.
任意の1文字
[c1c2c...cn]
c1c2c...cn のどれか。 例:[abc]ならabcのどれか。
[c1-c2]
c1からc2 の範囲のどれか。 例:[a-z]ならaからzまでのアルファベットの小文字。
[^c1c2c...cn]
並べられた文字以外。 例:[^abc]ならaでもなくbでもなくcでもないもの。
正規表現*
直前の「正規表現」の任意の繰り返し。 例:.*なら任意の文字の任意回数の繰り返し。 [a-z]*ならアルファベット小文字の任意回数の繰り返し。
正規表現1正規表現2
正規表現1に続き正規表現2が続く 例:abなら、「a」に続き「b」。
\(正規表現\)
タグ付き正規表現。 例: X\(abc\)*X は、XabcabcXにマッチする。
\N
N番目のタグ付き正規表現。 例: X\(abc\)\1X は、XabcabcXにマッチする。
\<
単語の先頭。vi, ex のみ。
\>
単語の終わり。vi, ex のみ。
正規表現 マッチする例 マッチしない例
abc abc, abcd ab
\\abc \abc, \abcd \ab
a.c aac, abc, xabc ac, a, c,
a*c c, ac, axc, aaac, xc a
[abc]x ax, bx, XaxX dx
[^abc]x dx, ex bx, Xbx, abx

◆egrep系

言語理論で定義された正規表現のうち、grep では使えなかったものがが使えるようになった。 ただし、一部、grep よりも機能が少ない。
正規表現+
正規表現の1回以上の繰り返し。「正規表現 正規表現*」と同じ。
正規表現?
正規表現が0回、または、1回。
正規表現1|正規表現2
正規表現1かまたは正規表現2。orの意味。
(正規表現)
正規表現のグループ化。
タグ付き正規表現\(\)やその参照\Nは廃止された。

◆Emacs の正規表現

grep系、egrep系の組み合わせ。|の意味が違い、egrepで |と書く所、Emacs では \|と書く。egrep で \|と書く所では、Emacs では|でよい。
正規表現1\|正規表現2
正規表現1かまたは正規表現2。orの意味。
\`
バッファの先頭
\'
バッファの最後
\w
単語
\W
単語以外
\b
単語の先頭、または、単語の末尾
\B
「単語の先頭および単語の末尾」以外
Emacs のバッファ とは、Emacs でメモリを抽象化したもの。ファイルの内容を読み込み、編集で きる。保存しないと失われる。
Last updated: 2022/04/13 11:08:09
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>