はじめての正規表現
はじめに
正規表現について、いろいろ調べてみました!💪🏻
なお、この記事は主に正規表現をJavaScriptで使う想定で書いていますが、他の言語でも当てはまる部分は多いと思います!💡
正規表現とは
正規表現について調べてみると、Wikipediaに以下のような説明がありました。
正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。
Wikipedia
うーん、よくわからない…🥺
と思って、わわわで調べてみると…
例えば「『あ』で始まるやつ!」や「『ほげ』という単語を含んでいて、さらに『い』で終わるやつ!」のように、文字列を指定する際に、曖昧な感じで指定ができる表現方法のこと
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
なるほど、わかりやすい!😳
でも、かわりに次の疑問が浮かびました。
🤨「曖昧な感じで指定ができるのに、なんで"正規"表現っていうんだろう…曖昧表現では…?」
なんで "正規" 表現???
同じように、正規表現の"正規"について気になった方が、とても分かりやすい記事を書いてくださっていました👇
一般に「正規」というと、「正規品」や「正規ルート」というように「本物の」や「公式の」という意味になります。
ですが、数学における「正規」とは、「ある概念に強い規制をかけたもの」という意味になるようです!!
主な正規表現のパターン
ここからは、正規表現のパターンについてまとめたいと思います。
文字クラス
パターン | 意味 | 備考 |
---|---|---|
ABC | ABC という文字列に一致する | |
[ABC] | A,B,Cのいずれか1文字に一致する | |
[^ABC] | A,B,C以外のいずれか1文字に一致する | |
[A-Z] | A〜Zの間のいずれか1文字に一致する | |
[1-9] | 1〜9の間のいずれか1文字に一致する | |
. (ドット) | 改行文字以外のどの1文字にも一致する | |
\d | 1個の半角数字(0123456789)に一致する |
[0-9] と同じ |
\D | 1個の半角数字以外に一致する |
[^0-9] と同じ |
\w | 1個の半角英数字・アンダースコアに一致する |
[A-Za-z0-9_] と同じ |
\W | 1個の半角英数字・アンダースコア以外に一致する |
[^A-Za-z0-9_] と同じ |
\s | 1個の空白文字に一致する | 空白、タブ、改ページ、改行、その他の Unicode 空白文字など |
\S | 1個の空白文字以外に一致する | |
\n | 改行に一致する | |
\t | タブに一致する | |
\ | 次の文字を特別に扱う・エスケープ |
\ を一致させたい場合は、\\ とする |
アサーション
パターン | 意味 | 備考 |
---|---|---|
^ | 入力の先頭に一致する | |
$ | 入力の末尾に一致する | |
\b | 単語の境界に一致する |
/\bm/ は "moon" の "m" に一致する |
\B | 単語の境界以外に一致する |
\b
や\B
についてはこちらの記事が分かりやすいです!👇
数量詞
パターン | 意味 | 備考 |
---|---|---|
x* | 直前の文字"x"の0回以上の繰り返しに一致する | |
x+ | 直前の文字"x"の1回以上の繰り返しに一致する | |
x? | 直前の文字"x"の0回か1回の繰り返しに一致する | |
x{n} | 直前の文字"x"がちょうど"n"回出現するものに一致する |
[0-9]{3} は「3桁の数字に一致する」という意味 |
x{n,} | 直前の文字"x"の少なくとも"n"回の出現に一致する |
[0-9]{3,} は「3桁以上の数字に一致する」という意味 |
x{n,m} | 直前の文字"x"が少なくとも"n"回、多くても"m"回出現するものに一致する |
[0-9]{3,6} は「3〜6桁の数字に一致する」という意味 |
参考記事
正規表現を学ぶときに、お世話になった記事です!
どれも分かりやすいので、ぜひ読んでみてください✨
基本編
👇JavaScriptで正規表現を扱うなら、とりあえずMDN
全部読むと、正規表現について結構理解できるようになる気がする
👇エスケープが必要な文字の一覧。たすかる…
より具体的に使う
👇ステップアップして、より具体的なシーンで使えるようになるための記事3つ
その他
👇正規表現を学びながら遊べるゲーム!!
なんていうか、パズドラ×寿司打みたいな感じかも。遊んでみたけど、とても楽しかったです😊
👇正規表現を検証できるツールのまとめ
おわりに
ここまでお読みいただきありがとうございました!!
- 肯定の先読み・後読み
- 否定の先読み・後読み
についての記述がなくてすみません!💦
いくつか記事は読んだけど、難しすぎて全然理解できなかった…これから勉強します…😂
Discussion