*️⃣

はじめての正規表現

2023/05/27に公開

はじめに

正規表現について、いろいろ調べてみました!💪🏻
なお、この記事は主に正規表現をJavaScriptで使う想定で書いていますが、他の言語でも当てはまる部分は多いと思います!💡

正規表現とは

正規表現について調べてみると、Wikipediaに以下のような説明がありました。

正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。
Wikipedia

うーん、よくわからない…🥺
と思って、わわわで調べてみると…

例えば「『あ』で始まるやつ!」や「『ほげ』という単語を含んでいて、さらに『い』で終わるやつ!」のように、文字列を指定する際に、曖昧な感じで指定ができる表現方法のこと
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

なるほど、わかりやすい!😳
でも、かわりに次の疑問が浮かびました。

🤨「曖昧な感じで指定ができるのに、なんで"正規"表現っていうんだろう…曖昧表現では…?

なんで "正規" 表現???

同じように、正規表現の"正規"について気になった方が、とても分かりやすい記事を書いてくださっていました👇
https://zenn.dev/yucatio/articles/0b554e59db0158

一般に「正規」というと、「正規品」や「正規ルート」というように「本物の」や「公式の」という意味になります。
ですが、数学における「正規」とは、「ある概念に強い規制をかけたもの」という意味になるようです!!

主な正規表現のパターン

ここからは、正規表現のパターンについてまとめたいと思います。

文字クラス

パターン 意味 備考
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 タブに一致する
\ 次の文字を特別に扱う・エスケープ \を一致させたい場合は、\\とする

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_expressions/Character_classes

アサーション

パターン 意味 備考
^ 入力の先頭に一致する
入力の末尾に一致する
\b 単語の境界に一致する /\bm/は "moon" の "m" に一致する
\B 単語の境界以外に一致する

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_expressions/Assertions
\b\Bについてはこちらの記事が分かりやすいです!👇
https://qiita.com/jnchito/items/b0839f4f4651c29da408#英単語にぴったりマッチさせる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桁の数字に一致する」という意味

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_expressions/Quantifiers

参考記事

正規表現を学ぶときに、お世話になった記事です!
どれも分かりやすいので、ぜひ読んでみてください✨

基本編

👇JavaScriptで正規表現を扱うなら、とりあえずMDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
👇正規表現入門。1~4まであります!どれも分かりやすい🥹
 全部読むと、正規表現について結構理解できるようになる気がする
https://qiita.com/jnchito/items/893c887fbf19e17d3ff9
https://qiita.com/jnchito/items/64c3fdc53766ac6f2008
https://qiita.com/jnchito/items/6f0c885c1c4929092578
https://qiita.com/jnchito/items/b0839f4f4651c29da408
👇エスケープが必要な文字の一覧。たすかる…
https://uxmilk.jp/50194

より具体的に使う

👇ステップアップして、より具体的なシーンで使えるようになるための記事3つ
https://qiita.com/Yametaro/items/36493c107053ae996b47
https://qiita.com/e99h2121/items/1ed7c2bd3d1c7227d9d8
https://qiita.com/penguinshunya/items/a60779811a1e52515b27

その他

👇正規表現を学びながら遊べるゲーム!!
 なんていうか、パズドラ×寿司打みたいな感じかも。遊んでみたけど、とても楽しかったです😊
https://qiita.com/yukiHaga/items/8ef2051036e126eb00c6
👇正規表現を検証できるツールのまとめ
https://qiita.com/aqril_1132/items/c185c7ad84c129e5a2df

おわりに

ここまでお読みいただきありがとうございました!!

  • 肯定の先読み・後読み
  • 否定の先読み・後読み

についての記述がなくてすみません!💦
いくつか記事は読んだけど、難しすぎて全然理解できなかった…これから勉強します…😂

Discussion