はじめに
株式会社エアークローゼットのプロダクトグループでエンジニアをしているSteinと申します。
この記事はエアークローゼット Advent Calendar 2022 の24日目の記事になります
今回は正規表現の基本的な使い方について話したいと思いますので、ぜひ最後までご覧ください。
正規表現とは
正規表現は、ある文字列を表現する一つの方式です。
でも、基本的には単なる文字列です。
例:
文字列1:textA
文字列2:textB
文字列3:textC
文字列4:textD
正規表現:\w*
\w*
は正規表現の特殊文字です。
以下に共通な特殊文字を紹介します。
特殊文字
^ (ハット)
^ は、行頭を示します。
例:
^abc
という4文字は、行頭が abc で始まるパターンを表現します。
行の途中に abc という3文字があっても、それとはマッチしません。
$ (ドルマーク)
$ は、 ^ に似ていますが、行の終わりにマッチします
例:
です。$
という4文字は、行末にある「です。」という3文字とマッチします。
行の途中にある「です。」という3文字とはマッチしません。
. (ドット)
. は、任意の1文字にマッチします。
ただし、改行コードとはマッチしません。
改行コード以外の1文字を示します。
[……] 大括弧
[と]の中に書かれた任意の1文字にマッチします。
例:
[abc]
a, b, c の3文字のいずれか1文字を表現します。
3文字のうちどれでもいいのですが、とにかく1文字とマッチします。
「-」 は、範囲を表わす特別の文字です。
例:
[0-9] = [0123456789]
[a-z] = 小文字アルファベット
[A-Z] = 大文字アルファベット
[ぁ-ん] = ひらがな
[ぁ-ん] = カタカナ
[^……] 大括弧
これは指定された文字集合以外の1文字を表現します。
例:
[^abc]
という6文字は、「a,b,c以外の任意の1文字」を表現します。
{} 中括弧
{m}
これは、前置される正規表現のぴったりm回の繰り返しです。
例:
bc{3}
という文字列は、bcccにマッチします。
{m,}
これは、前置される正規表現のm回以上の繰り返しです。
例:
bc{3,}
という文字列は、bccc,bcccc,bcccccなどにマッチします。
{m,n}
これは、前置される正規表現のm回以上n回までの繰り返しです。
例:
bc{3,4}
という文字列は、bcccとbccccにマッチします。
| パイプ
これは、「または」という接続詞に該当するものです。
例:
abc|main
という8文字は、 abc という3文字か、または、 main という4文字にマッチします。
* アスタリスク
半角の * は、直前の1文字の0回以上の繰り返しを表現します。
例:
a*
という2文字は、 a aa aaa aaaa などとマッチします。
そのほか、「aという文字がない状態」ともマッチします。
+ プラス
半角の + は、直前の1文字の1回以上の繰り返しを表現します。半角の * が0回以上の繰り返しだったのに対し、こちらは1回以上の繰り返しです。
例:
abc+
という4文字は、 ab にはマッチしません。
abc abcc abccc などにマッチします。
? 疑問符
半角の ? は、直前の文字の0回または1回だけの登場(とうじょう)を表現します。
例:
abc?
という4文字は、 ab abc のいずれかにしかマッチしません。
\ バックスラッシュ
\ は、特殊文字の特別の意味を打ち消すためのものです。
例:
\^ = ^
\. = .
\? = ?
(……) 括弧
半角の ( と、同じく半角の ) で囲んだ部分は、一つのまとまりグループとみなします。もちろん、正規表現をこれで囲んでもかまいません。
例:
(abc)+
という6文字は、 abc abcabc abcabcabc などとマッチします。
補足
• \s 空白文字1文字
• \w 英数字または「_」のうち1文字
• \d 数字1文字
正規表現を使って文字列検索
一部異なるが同じ構造の文字列を検索したい場合は、正規表現が最適です。
現在、vscode、sublime textなどが正規表現検索機能をサポートしています。
例えば:SELECTクエリを検索したい。
各クエリが別のIDを含まれているので、普通の検索はできません。
検索のボックスで正規表現オプションを選びます。
SELECT\s.*FROM\s*.*WHERE\s.*;
という正規表現を入力して、SELECTクエリが選択されました。
\s 空白文字1文字
.* 任意の1文字、0回以上の繰り返しとマッチします。
あとがき
最後までご覧いただきありがとうございました。
エアークローゼット Advent Calendar 2022はまだ続きますので、興味あれば、ぜひ他のエンジニア、PMの記事もご覧いただければと思います。