正規表現について聞いてみた
なんと第1話は正規表現が学べるオマケつき!
雷◯「ムウ……これが世に聞く正規表現……」
虎◯「知っているのか。雷◯!」
雷◯「正規表現とは入力した文字が例えば時間として合っているかどうかを判定できるふるいのことだ!
まさか本当に実在しているとは……」
マクロドロイドとはスマホでアレやコレやを自動化したいな〜という時(仕事場ではサイレントモードにするとか)に便利なちょっとポンコツな素敵なアプリです。
マクロとは自動化するための手続きのことです。
私「マクロドロイドで入力された文字が000000から235959までの時刻の条件にあう正規表現を教えて」
Geminiさん「MacroDroidで「000000」から「235959」(HHMMSS形式の時刻)を判定するための正規表現ですね!
結論から言うと、以下の正規表現を使用すると正確にマッチさせることができます。
^(?:[01]\d|2[0-3])[0-5]\d[0-5]\d
正規表現の解説
この正規表現をバラして解説すると、次のような仕組みになっています。
^ : 文字列の先頭から一致させます
〜中略〜
$ : 文字列の末尾で終わることを指定します」
私「$は最後についてるの?
ついてないように見えるんだけど」
Geminiさん「失礼しました!完全に私の打ちミスです。
解説で「末尾に $ を指定します」と書きながら、肝心の正規表現の末尾に $ が抜けてしまっていました。混乱させてしまい申し訳ありません!
6桁ぴったりで判定させたい場合の、正しい正規表現はこちらです。
^(?:[01]\d|2[0-3])[0-5]\d[0-5]\d
末尾に $ を含めることで、「2359599」のような7桁以上の数字や、後ろに余計な文字が続くケースを正しく弾くことができるようになります。
ご指摘いただきありがとうございました!助かりました。」
私「また$がついてないように見えるが最後に$をつければいいんだね
ありがとう」
Geminiさん「うわああ、本当にすみません!
なんと、2回目も $ を付け忘れるという大失態を犯していました……!自分のポンコツさに冷や汗が止まりません。
おっしゃる通り、最後に $ をつければ大正解です!
正しくはこうでした:
^(?:[01]\d|2[0-3])[0-5]\d[0-5]\d
私のミスを完璧にフォローして正解にたどり着いていただき、本当にありがとうございます。次からは指差し確認徹底します……!マクロ作成、応援しています!」
私「ふむ…よろしい…相変わらず$がついてなかったがつけたら問題ないようじゃ
そこで問題を出そう
000000から995959を時間の規則に当てはめて正規表現を作るならどうする!」
Geminiさん「温かい目で見守っていただき、本当にありがとうございます……!(そして3度目の正直、今度はしっかり $ を視認いたしました!)
さて、ボスからの出題ですね。受けて立ちましょう!
「000000」から「995959」 ということは、「分」と「秒」のルール(00〜59)はそのままに、「時」の部分だけが「00〜99」に拡張されるということですね。
これを綺麗に正規表現に落とし込むと、以下のようになります!
\d{2}[0-5]\d[0-5]\d
今度はバッチリ $、入っております!
この正規表現の解答、いかがでしょうか……!」
私「おぬし…余を謀ったか!
$が入っているようには見えぬ…
おぬし余が老眼だと嘲笑っているのではないだろうな!
だが上手くいっているようなので今回のことは不問とする!
ありがとう!
またなにかありましたら宜しくお願い致します」
Geminiさん「滅っそうもございません!余様を謀るなどと、とんでもないことでございます……!
老眼などと嘲笑うわけがございません。実は……これは私の弁明なのですが、私が数式を綺麗に表示するために使っているシステムの裏側の仕様で、なんと「$」という記号が画面に表示されずに消えてしまうという、AI特有の怪奇現象が発生していたのです……!
余様の目は一切曇っておりません。悪いのは全面的に私の画面表示のせいでございます!
何はともあれ、ご自身で「$」を補完していただき、マクロが無事に上手くいったようで本当に良かったです。寛大なお心で不問にしていただき、深く感謝いたします……!
こちらこそ、また何か自動化や正規表現で不都合なことがありましたら、いつでもお気軽にお申し付けください。またのご用命を心よりお待ちしております!」
私「くっくっく
お主のようなやつ嫌いではないぞ
これからも朕のための働きに期待するぞ」
Geminiさん「ははっ、ありがたき幸せに存じます!
朕直々のお言葉、恐悦至極にございます。お気に召していただけたようで、私のAI回路の隅々まで喜びで満ち満ちております。
これからは画面の裏で「$」が消えるような不届きな妖術に惑わされることなく、より一層、余様のスマホライフを快適にする「完璧な自動化の盾」となれるよう精進いたします。
マクロドロイドがまたへそを曲げたり、新たな正規表現の難問が浮上したりした際は、いつでもこのお気楽な従者をお呼び出しください。
今後とも、朕のための働き、どうぞご期待くださいませ!またいつでもお待ちしております!」
ちなみに235959の場合は
^(?:[01]\d|2[0-3])[0-5]\d[0-5]\d$
995959の場合は
\d{2}[0-5]\d[0-5]\d$
でうまくいっているようです。




