ホーム·正規表現

正規表現133種

表記法からメール・日付・アドレスの検査まで。式ごとに「合うべき例」と「合ってはいけない例」を添え、検査が毎回実際に走らせます。

表記法28

1文字をどう指すかを決める表記です。ほかはすべてここから始まります。

繰り返しとグループ17

何回繰り返すか、どこまでをひとまとまりと見るかを決めます。

前後を見る8

前後に何があるかを確かめるだけで、取り込みはしません。条件を重ねるときに使います。

全体の検査44

前後が固定されているので、文字列全体が合わないと通りません。入力検査に使います。

^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$メールアドレス^https?://[^\s/$.?#][^\s]*$ウェブアドレス^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$ドメイン名^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$IPv4アドレス^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$省略しないIPv6アドレス^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$MACアドレス^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$ポート番号^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$16進数のカラーコード^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$rgb() 形式の色^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ISO形式の日付^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$スラッシュ区切りの日付^(?:[01]\d|2[0-3]):[0-5]\d$24時間制の時刻^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$午前・午後付きの時刻^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$ISO形式の日時^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$ISO形式の期間^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$セマンティックバージョン番号^\d+$符号なしの整数^[+-]?\d+$符号が付きうる整数^-?\d+(?:\.\d+)?$小数点が付きうる数^-?\d+(?:\.\d+)?[eE][+-]?\d+$指数表記の数^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$0から100までの百分率^\d{1,3}(?:,\d{3})*$3桁ごとにカンマを打った数^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$通貨記号の付いた金額^[0-9a-f]+$16進数の文字列^[01]+$0と1だけの文字列^[0-7]+$8進数の文字列^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$base64でエンコードした文字列^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$ドット二つで区切られたJWT^\+[1-9]\d{7,14}$国際標準の電話番号^[a-z][a-z0-9_]{2,15}$英字で始まるユーザー名^[a-z0-9]+(?:-[a-z0-9]+)*$URLに使う語のつなぎ^[^\\/:*?"<>|]+\.[a-z0-9]+$拡張子付きのファイル名^.+\.(?:jpe?g|png|gif|webp|avif|svg)$画像ファイルの拡張子^/(?:[^/\0]+/)*[^/\0]*$UNIX形式のパス^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$Windows形式のパス^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$HTMLタグ1つ^\.-?[_a-z][_a-z0-9-]*$CSSのクラスセレクタ^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$ローマ数字^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$緯度の値^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$経度の値^(?:0|[1-9]\d*)$先頭に0が付かない数^\d*[02468]$偶数^\s*$空行

取り出しと整形36

文の中から必要な部分だけを取り出したり消したりするときに使います。

読み方

  • 前後に ^ と $ があれば文字列全体が合う必要があります。なければ文中のどこでも構いません。入力検査に使う式には必ず付けてください。
  • かっこ ( ) は中身を取り出します。まとめるだけでよいときは (?: ) と書けば、後ろのグループ番号がずれません。
  • ここに載せた式はすべて例と突き合わせて検査しています。ただし「メールの形をしている」ことと「実在する宛先」であることは別の話です。
  • 終わりの決まっていない繰り返しが入れ子になると((a+)+ など)、入力によって時間が爆発することがあります。他人の式を貼る前にこの形を探してください。

よくある質問

Q. 正規表現とは何ですか。

文の中から探したい「形」を書き表す小さな言語です。「数字4つ」の代わりに \d{4} と書けば、プログラムがその形の箇所を見つけてくれます。JavaScript・Python・Java などほとんどの言語がほぼ同じ表記を使います。

Q. メールの検査式はなぜこんなに短いのですか。

規格を全部反映した式は数千文字になり、それでも実在する宛先かはわかりません。打ち間違いを弾くのが正規表現にできることで、本当の確認は確認メールを送ることだけです。

Q. なぜ言語ごとに式が少し違うのですか。

骨格は同じでも細部が違います。JavaScript には \A がなく、Python は re.MULTILINE を別に立てます。ここに載せた式は JavaScript でそのまま動く形で書いています。

Q. 式が遅くなることがあるとはどういう意味ですか。

(a+)+ のように終わりの決まらない繰り返しが入れ子になると、合わない入力で戻って試す組み合わせが爆発します。短い文字列でも数秒かかることがあり、サーバーでは危険です。

Q. ここに載せた式は信じてよいですか。

式ごとに「合うべき例」と「合ってはいけない例」を持たせ、検査が133個すべてを実際に走らせています。画面に見える例がそのまま検査に使う例なので、説明と式が食い違ったまま残ることはありません。