Infra Engineer

正規表現についてと代表例
2021.11.26
Lv1

正規表現についてと代表例

本記事の対象者

LPIC level1習得を目指す初学者の方


今回の内容

今回は、正規表現について解説します。

・正規表現とは
・代表的正規表現一覧
・まとめ

正規表現とは

正規表現とは文字列のパターンを記述するための表現です。
Linuxだけで用いるものではなく、プログラミング言語などでも広く使われるものです。
例えば、以下のような場面は多くあるでしょう。

・「https://」で始まり、以下に任意の文字列が入るものを指定したい。(URL)
・「-」の前に3文字、後に4文字の数字が入る文字列を指定したい。(郵便番号)

このような指定をしたい際に正規表現を使用することができます。


代表的正規表現一覧

正規表現の具体的な記法のうち、代表的なものを一覧で紹介します。

正規表現 説明 具体例 具体的表記
^ 先頭に一致する。 先頭が「a」で始まる。 ^a
$ 末尾に一致する。 末尾が「z」で終わる。 z$
[〇〇〇] いずれかの文字に一致する。 a, b, cのいずれかに一致する。 [abc]
[〇-〇] いずれかの文字に一致する。(範囲指定) a~zのいずれかに一致する。 [a-z]
[^〇〇〇] いずれかの文字に一致しない。 a, b, cのいずれかに一致しない。 [^abc]
[^〇-〇] いずれかの文字に一致しない。(範囲指定) a~zのいずれかに一致しない。 [^a-z]
.(ドット) 任意の一文字に一致する。 「sample」という文字列の直後に任意の一文字がある sample.
\(バックスラッシュ) 直後の一文字をエスケープする。

※エスケープ
直後の特別な意味を持つ文字列を単なる文字列として解釈すること。

「$」で始まり、直後に任意の一文字がある。 ^\$.
\d すべての数字。 数字で終わる。 \d$
* 直前の一文字の0回以上の繰り返しに一致する。 「sample」という文字列を含む。 .*sample.*
以下は拡張正規表現
+ 直前の一文字の1回以上の繰り返しに一致する。 「sample」という文字列の前後に文字を含む。 .+sample.+
? 直前の一文字が0文字か1文字の場合に一致する。 末尾が「samples」もしくは「sample」で終わる。 .+samples?$
|(パイプ) 前後のいずれかに一致する。 「ab」または「bc」に一致する。 ab|bc
{n} 直前の一文字をn桁で指定する。 3桁の数字で始まる。 ^/d{3}

これらの正規表現を使用して、複雑な文字列条件を指定することができます。
拡張正規表現は、Linuxでは使用できないコマンドが一部あります。

例えば、冒頭の「URL」と「郵便番号」はどのように記述できるでしょうか。少し考えてみてください。

URL
※正規表現の始まりと終わりは「/」で表現されます。

表示
/^https?:\/\//
「h」から始まるので「^h」となります。「https」「http」どちらにも対応可能なように「s?」と記述します。
「/」は正規表現の終わりを表しますので「\」でエスケープします。

郵便番号

表示
/^\d{3}-\d{4}$/
3桁の数字から始まり、「-」をはさみ、4桁の数字で終わります。

まとめ

今回は、正規表現について解説しました。
Linuxの操作においては、「grep」コマンドでのファイル検索や「sed」コマンドでの置換の際に使用します。
それぞれの具体的な使い方については、コマンドごとの記事を参照してください。