全国の正規表現に対して苦手意識のある方へ
正規表現の基本の考え方を知って正規表現は頑張ればできます状態になりましょう。
そもそも正規表現とは
英語では Regular Expressionと言います。
文字の検索といえばcmd + F
Windowsなら ctrl + F
が思いつくと思いますが
基本的には完全に一致した文字列を検索します。
これが正規表現を用いると更に柔軟な検索が可能となりURL、電話番号、メールアドレスなどののパターンの検索が可能になります。
例えばURLは^(http|https)?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
のような書き方ですべての形式を表すことができます。
それではどう考えて書けばよいか筆者なりの考えを書いていきます。
個人的に正規表現を書くときの考え方
-
パターンを言語化する
-
特殊な文字とエスケープが必要な文字を調べる
-
位置を気をつけながら書き始める
パターンを言語化する
初手でどんなパターンを正規表現で表すかを考えます。
- 文字数に制限はあるか?
- 使わない文字はあるか? (英数記号など)
- 固定されている文字はあるか?(URLであれば先頭はhttp or https://{ドメイン}/{パス})
といった感じでまとめます。
最初から書くのではなく最初に考えましょう。
特殊な文字とエスケープが必要な文字を調べる
目に見える文字と見えない文字を分けながら考えると書きやすいです。
見える文字
半角英語、数字、記号などよく見るものを指しています
半角英語は[a-zA-Z]
半角数字は[0-9]
, もしくは\d
半角英数は\w
, もしくは[a-ZA-Z0-9]
ちなみにO
と0
を利用文字から外すという要望があれば[A-NP-Z]
, [1-9]
と書くことで実現できる。
記号に関しては正規表現で使われる\, ., +
などの文字はエスケープする必要があるので注意。
見えない文字
タブや半角スペース、改行なども含める場合は追加で調べましょう。
よく使うのは\s
(すべての改行、スペース、タブ), \n
(LFの改行), \t
(タブ)などですね。
位置を気をつけながら書き始める
さぁ、準備ができたら書いていこう。
位置だけは気にする必要があるが下の例題を見ながら考えていくことにする。
ちなみにここで言う位置とは先頭、末尾と途中の固定文字だと思ってもらいたい。
練習
日付形式
個人的には最もシンプルでたくさん考えられる日付を練習の最初に入れたい。
日本ではYYYY-MM-DD
, YYYY年MM月DD日
がよく使われ、イギリスではDD/MM/YYYY
がよく使われる。
YYYY-MM-DD
を考えてみましょう。
1. パターンの言語化
自明である気がするが順番を守って説明させてほしい。
数値4桁
-> -
-> 数値2桁
-> -
-> 数値2桁
となる。
2. 特殊な文字とエスケープが必要な文字を調べる
今回はハイフンがあるもののエスケープは必要ない。
3. 位置を気をつけながら書き始める
さぁ実際に書いていこう。
位置について、^
と$
をここで紹介したい。
^
は先頭を示し、$
は末尾を示す。
YYYY-MM-DDのみの文字列である場合は^{YYYY-MM-DD部分の正規表現}$
と書くと良い。
そして数値は\d
、N回連続は{N}
とするから^\d{4}-\d{2}-\d{2}$
となる。
おまけ
VSCodeで検索をするときに正規表現を使うことが可能。
やり方はcmd+F
で検索バーを出したら入力欄の一番右の*
マークを含むアイコンをクリックすると正規表現の検索が可能になる。