はじめに
私は「正規表現」と聞くと「ああ、メールアドレスとかのアレね」くらいの知識しかなく、「なんか難しいくてややこしいやつ」という感じで避けてました。
先日、職場のエンジニアとのペアプロの際に特定の文字列を探している時に、「正規表現使えばもっと早く探せますよ」と言われて、正規表現のゲームを紹介されたのでさっそく遊んでみました。
チュートリアルでは「ウォーターサーバー」と「ウォータサーバー」などの表記ゆれを例に出し、そういった場合でも「ウォーター?サーバー?」と入力すれば表記ゆれもマッチして検索できる、という様な感じで分かりやすく説明してくれます。
実際のパズルは全35問ですが、途中から難易度が上がってきて現時点で私は10問しか解けてません…
(競技プログラミングなどが好きな人はスラスラ解けるかもしれないです)
Qiitaでも過去に正規表現のゲームを作成した内容をかかれた記事がありますね。
少しだけプレイしましたが、こちらも面白いのでパズルを終わらせたら次はこっちにも挑戦しようと思います。
正規表現に興味がでて、書籍の方でもちゃんと理解しようと思って初心者向けの本を購入しましたが、めちゃめちゃ分かりやすいです。
レビューの評価も高く、まさに正規表現に入り口にはふさわしい内容です。
チートシートを書いてみました
記憶の定着も兼ねて書籍を参考にチートシートを自作しました。
記号 | 意味 |
---|---|
.(ピリオド) | 何か1文字にマッチ |
[◯◯] | どれか1文字にマッチ 例:[花狐]火→花火、狐火、引火の場合「花火」と「狐火」にマッチ |
[^◯◯] | これ以外の1文字にマッチ 例:[^花狐]火→花火、狐火、引火の場合「引火」にマッチ |
[◯-◯] | この範囲の1文字にマッチ 例:[2-4]位→1位〜9位の場合「2位」「3位」「4位」にマッチ |
\d | 半角数字にマッチ 例:\d→2024年アドベントカレンダーの場合「2024」にマッチ |
\D | 半角数字以外にマッチ 例:\D→2024年アドベントカレンダーの場合「年アドベントカレンダー」にマッチ |
\w | 半角英数字にマッチ 例:\w→2024年Advent Calendarの場合「2024 Advent Calendar」にマッチ |
\W | 半角英数字以外にマッチ 例:\W→2024年Advent Calendarの場合「年」と半角スペースにマッチ |
\s | 空白(半角スペース,タブ,改行,キャリッジリターンに)マッチ 例:\s→2024年Advent Calendarの場合「Calendar」の前の半角スペースにマッチ |
\S | 空白以外にマッチ 例:\S→2024年Advent Calendarの場合「2024年Advent Calendar」の半角スペース以外の全てにマッチ |
◯|● | どちらかの表現にマッチ 例:ラーメン|焼肉→ラーメン、寿司、焼肉、ハンバーガーの場合「ラーメン」と「焼肉」にマッチ (|を半角にするとテーブルセルの区切り線になってしまうので全角で書いてます。本来は半角です) |
^ | 先頭位置にマッチ 例:^.巻紙→赤巻紙 青巻紙 黃巻紙の場合「赤巻紙」にマッチ |
$ | 末尾位置にマッチ 例:.巻紙$→赤巻紙 青巻紙 黃巻紙の場合「黃巻紙」にマッチ |
* | 0回以上の繰り返しにマッチ 例:許さー*ん→許さん、許さーん、ゆるさーーーーんの場合、ーが0回以上なので全てにマッチ |
+ | 1回以上の繰り返しにマッチ 例:許さー+ん 許さん、許さーん、ゆるさーーーーんの場合、ーが1回以上なので「許さん」以外はマッチ |
? | あってもなくてもマッチ 例:girls? girl、girls、boy、boysの場合、girlとgirls両方マッチさせたい場合に使用。結果、末尾にsが無いgirlにもマッチ |
{n} | n回の繰り返しにマッチ 例:第\d{4}回 第1回、第002回、第0003回の場合、数字が4回繰り返している「第0003回」にマッチ |
{n,} | n回以上の繰り返しにマッチ 例:\w{6,} father、uncle、daughterの場合、英数字が6回以上繰り返している「father」と「daughter」にマッチ |
{n,m} | n回以上m回以下の繰り返しにマッチ 例:¥\d{1,3},000 ¥100 ¥1,000 ¥999,000 ¥1,234,000の場合「¥1,000」と「¥999,000」にマッチ |
参考(チートシートはこっちの方が分かりやすいかもです…)