はじめに
この記事は、Regexとはなんぞやということを、自分の理解のために整理してみたものです。
Regexとは?
Regex=Regular expressions のことで、
__正規表現__を意味します。
正規表現とは、
__パターンを使ってより細かい検索をかける__ことで、
様々な言語で使用することができます。
検索をかける書き方のパターンは、
基本的に言語を通して共通しています。
ここからは、
実際に正規表現をいくつか紹介していきます。
メタ文字
※正規表現に使える、
特別な文字のことを__メタ文字__と言います。
※このメタ文字自体を文字として検索したい場合は、「\」を用いれば良いです。
ドット.
「なんでもいいけど1文字」を表す。(改行以外、空白もドットも入る)
かぎかっこ[]
「いずれかの文字」ということ。
例)
[ABC]
なら、AかBかCということです。
否定の場合は、
[^ABC]
と書きます。
これは、「いずれかの文字でない」ということです。
ABCでなければなんでも良いので、空白なども入ります。
ハイホン-
文字の範囲指定ができます。
[A-Z]
[0-9]
のような感じです。
[a-zA-Z0-9]
と書くと、小文字のa~z, 大文字のA~Z, 数字の0~9のいずれかに当てはまるということです。
ワード文字 \w
\w
は [a-zA-Z0-9_]
と同じ意味です。(アルファベットか数字かアンダースコア)
\W
だと、否定の [^a-zA-Z0-9_]
と同じ意味になります。
(小文字か大文字かの違い)
数字Digit
\d
は [0-9]
と同じ意味です。
ワード文字と同様に、\D
の時は否定になります。
Space
\s
は、「空白、タブ、改行文字」を意味します。
「空白、タブ、改行文字」以外を表す時は、\S
です。
プラス+
「直前の文字の1回以上の繰り返し」という意味です。
アスタリスク*
「直前の文字の0回以上の繰り返し」という意味です。
クエスチョンマーク?
「直前の文字の0回または1回の登場」という意味です。
Lazyとして、「最小限のマッチに強制」という意味合いも持っています。
{ }
「繰り返し回数」を表します。
{1,3}
なら、1回以上3回までということです。
例)
b\w{2/3}
なら、
bee, beer, beeersなどが引っかかります。
{2,}
なら2回以上、
また{3}
は、限定回数を表します。
選択 |
「いずれかの文字(文字列)を指定」という意味です。
例)
b(l|e|i)d
行末・行頭の条件
^
で、「行頭である」という条件をつけることができます。
$
で、「行末である」ということの条件付けです。
^Hello$
のように両用することもできます。
ワード境界
\b
で、「他のワードとの境界」にマッチします。
グループ化()
(ha)+
などとすると、
グループ'ha'の繰り返しを表します。
この()は、勝手にキャプチャリングされ、
後々、\1,\2,\3...というように、
指定し、参照することができます。
例えば、(\w)a\1
とすれば、
⚫︎a⚫︎、のようなaを同じ文字で挟んだものという指定ができます。
⚠️$1, $2, $3はまた別⚠️
キャプチャリングを防ぐには、
(?:ha)+
というように、
?:を追加すれば良いです。
フラグ
「大文字小文字を区別しない」とき、
insensitiveのiを用いて書きます。
gグローバルマッチ
グローバルマッチをオフにすると、
最初にヒットした時点で、
検索をやめてしまいます。
mマルチライン
マルチラインをオフにすると、
複数行の検索をしなくなります。
参考
YouTUbe チュートリアル道場 正規表現入門