📔

正規表現のメモ

2021/11/07に公開約5,000字

はじめに

正規表現は、ログやConfigを見るときになど使用しますが、
正直小学生を相手に説明できるかといわれると出来ません。(キリッ)
なので、基本の部分ですが簡単に記事にしてみました。
またチートシートとして利用いただければと思います。(随時更新予定です。)

正規表現

正規表現(せいきひょうげん、英: regular expression)

文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれる

「Flower」と「Float」があった場合、
「Flo(wer|oat)」と正規表現で表すことができるようになります。

メタ文字

メタキャラクタ文字 (めたきゃらくたもじ、英: metacharacter)

コンピュータプログラムに与える文字列データの中で、特別な意味や役割を持つ文字のこと

基本的なメタ文字などを一覧化してみました。

基本メタ文字

文字 意味 使用例 結果 説明
. 任意の1文字に一致させる A. AB,AC,A1,Aa Aの次に何らかの1文字がある場合に一致させる
* 直前の文字が0回以上に一致させる A* ,A,AA,AAA,... 0個以上連続したAに一致させる
直前の文字が1回以上に一致させる A⁺ A,AA,AAA,... 1個以上連続したAに一致させる
? 直前の文字が0回以上または1回に一致させる AB?C ABC,AC AとCの間にBがない、もしくは、Bがある場合に一致させる
{n} 直前の文字がちょうどn回に一致させる A{5} AAAAA 5個のAに一致させる
{n,m} 直前の文字がn回以上、m回以下に一致させる A{2,4} AA,AAA,AAAA 2個以上、4個以下のAに一致させる
[...] []内の文字に一致させる [abd]
[A-Z]
[0~9]
a,b,d
A~Zの英字大文字
0~9の数値文字
\w 英数字かアンダーバーを表す(a~z,A~Z,0~9,_)
\d 数値文字を表す(0~9)
| OR条件の使用方法 AA|BB|CC AA,BB,CC AAまたはBBまたはCCに一致させる
() グループ化 A(a|b|c) Aa,Ab,Ac AaまたはAbまたはAcに一致させる
\s 空白、タブを一致させる

位置を表すメタ文字

文字 意味 使用例 結果 説明
^ 行の先頭に一致させる ^g google 行頭がgから始まるすべての行に一致させる
$ 行の末尾に一致させる $e google
Youtube
apple
行末がeで終わるすべての行に一致させる
\b 単語の先頭に一致させる \bg google 単語の先頭がgから始まるすべての単語を一致させる
\b 単語の末尾に一致させる e\b google
Youtube
単語の行末がeで終わるすべての単語を一致させる
\B 単語の先頭に以外に一致させる \Bg Youtube
apple
単語の先頭がgから始まらないすべての単語に一致させる
\B 単語の末尾以外に一致させる e\B Facebook 単語の末尾がeで終わらないすべての単語に一致させる
^...$ 指定した単語のみの行に一致させる ^google$ google 行全体がgoogleとなっている行に一致させる
^$ 改行(行の先頭と末尾)に一致させる ^$
^.*$ 行全体を一致させる

エスケープシーケンス

先頭にバックスラッシュが指定されて、アルファベットや数字で構成される文字の組み合わせのこと。

文字 意味
\cX Ctrl +X (Xは任意の文字)
\n 改行コード
\r 改行コード
\f 改ページ
\t タブ
\v 垂直タブ
\S 空白文字以外のすべての文字
\d 数値文字
[0-9]と同義
\D 数値文字以外
[^0-9]と同義
\l すべての半角英小文字
\L すべての半角英小文字以外の文字
\u すべての半角英大文字
\U 全ての半角英大文字以外

正規表現を使った置換方法

VB.Netでの使用する場合には、下記のようにしてあげれば置換が可能になります。

regexp.Replace("置換前","置換後")

使用頻度の高い正規表現

構文
ドメイン名 ^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9].[a-zA-Z]{2,}$
URL ^https?://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
携帯電話番号 ^0[789]0-\d{4}-\d{4}$
日付 (YYYY-MM-DD形式) ^\d{4}-\d\d-\d\d$
郵便番号 ^\d{3}-\d{4}$
空白行 \n\s*\r
英数字 ^[A-Za-z0-9]+$

まとめ

正しく理解して、いちいちググらずに正しく正規表現を活用していきたいですね。
理解したこと、使用頻度の高いものに関しては追記していければと思います。

Discussion

ログインするとコメントできます