1. マヂカル.fm
  2. 255: おしえて、正規表現 ~み..
255: おしえて、正規表現  ~みんなで効率厨になろう~
2026-06-04 40:20

255: おしえて、正規表現 ~みんなで効率厨になろう~

spotify apple_podcasts

今回は「正規表現」について話しました。

 

upaが初めて読んだ技術書 “ 詳説 正規表現” /言語ごとに方言がある/パターンのマッチ/抽出/否定先読み・肯定先読み/例外には弱い

▼ 名言ステッカーやアクリルキーホルダーなどのグッズが増えました🙌
https://suzuri.jp/magicalfm

 

▼ マヂカル.fmとは
関西人のプロダクトマネージャー@michiru_daと関西人(?)のソフトウェアエンジニアの@upamuneが週2で配信する雑談Podcast。

 

▼ お便りや感想はこちらからおまちしています。

X(旧Twitter): #magicalfm 
おたよりフォーム: https://magical.fm/hello
マシュマロ:https://marshmallow-qa.com/xno94s1ortkw63w?t=e1P9wQ

感想

まだ感想はありません。最初の1件を書きましょう!

00:07
michiru_da
マジカルFMは関西人のプロダクトマネージャーのみちるだと、関西人のソフトウェアエンジニアのうぱみゅんが、週2で配信する雑談ポッドキャストです。お願いします。
うぱ / upamune
お願いします。
michiru_da
今日のテーマは、正規表現って何?
うぱ / upamune
出たね、正規表現。
michiru_da
なんかさ、聞くんですよ。
うぱ / upamune
うん。えぇ?誰から?
michiru_da
でも、何?何かの設定を正規表現で書いてくださいみたいな。
うぱ / upamune
あー。確かに何かの設定をする時とかに、なんか、その、プロダクトによっては普通のテキストで書くか、それともなんか正規表現を利用するかみたいな設定項目とか、なんかよくあったりしますよね。
michiru_da
あるんですよ。で、なんかまあその、システム開発みたいなところに言うと、まれに聞く、まれによく聞くっていう感じの概念なんですけど、
え、今日何なのこいつは?っていうね。
うぱ / upamune
正規表現はね、難しいんですよね。
michiru_da
難しいんだ。
うぱ / upamune
多分、エンジニアでも正規表現だけをちゃんと勉強したことある人って、結構いないんじゃね?っていう。
michiru_da
そんな奥深いものなの?
うぱ / upamune
奥深いですよ。
michiru_da
え、正規表現ってことはさ、表現ってことはさ、なんかの書き方を定めたツールってことなの?
うぱ / upamune
いや、ちょっと日本語が結構、うーん。
michiru_da
それがミスリード?
うぱ / upamune
うーん。かもね。
michiru_da
へー。
うぱ / upamune
正規表現って難しすぎるよね。あ、でも確かに英語でもレギュラーエクスプレッションだから、そうなのか。
michiru_da
なんか標準的な。
うん。
うぱ / upamune
式。
michiru_da
うん。
うぱ / upamune
正規表現って聞いて、その全く何もイメージできない気がする。
michiru_da
そうね。え、なんだっけ、正規化と同じ正規って感じですか?
うぱ / upamune
あ、そうですね。
michiru_da
オライディの正規表現。
うぱ / upamune
これ、私が初めて読んだ技術書です。
michiru_da
へー。
うぱ / upamune
正規表現、小説正規表現第3版。えー、正規表現について528ページあります。
本当にもうマジドンキーみたいな。
michiru_da
うん。
うぱ / upamune
ほんだけちょっとあれですね、生きりばんちょですね。
大学1年生でみんなちょっとC言語の入門書とか読んでる中、いや俺は正規表現。
ちょっと生きる方向を間違えてる。
普通、なんかもっとさ、なんだろう、データベースの。
michiru_da
そうだね、データベース系とかもね。
うぱ / upamune
セキュリティとかハッキングとか読めばいいのに、フクロウの正規表現。
渋。
michiru_da
これは、何ですか、概念なんですか?
うぱ / upamune
何を?
michiru_da
なんだろう、なんかさ、いやー、むずいな。
なんて言ったらいいんですか。
うぱ / upamune
正規表現って何なのさっていうこと?
michiru_da
そう、なんか考え方みたいな感じなの。
うぱ / upamune
いや、うわー。
michiru_da
そういう技術?
うぱ / upamune
まあ、そうですね、その、うん。
それ両方、概念と実装というか、その技術も含むと思う。
03:02
michiru_da
ほう。
別に言語はじゃあ特定されないの?
うぱ / upamune
いろんな言語の中で正規表現を使うみたいな感じ?
ちょっと待ってください、言語って何ですか?
えー、なんだろう、例えばさ、Pythonとかさ、Javascriptみたいな。
その中で正規表現の、なんだろう、正規表現が出てくるじゃないですか、
その正規表現という、まあちょっとしたミニ言語みたいなやつなんですけど、
michiru_da
それの解釈が結構その言語によって違ったりします。
あー、なるほどですね。
うぱ / upamune
だから、例えば、語言語の正規表現と、例えばRuby、Pythonの正規表現は、
同じ書き方をしたらちょっと解釈が違うみたいな。
michiru_da
なるほどです。
うぱ / upamune
なので、よくWebサイトで正規表現を試せるサイトとかあるんですけど、
それはそのどのエンZINEを使うかみたいなのを、
例えばそのPythonだったらこれにヒットするけど、
他のやつだったらヒットしてないみたいなのも見れたりするっていう感じですね。
ちょっと先走っちゃったけど、正規表現ってなんやねん。
michiru_da
なんやねん。
うぱ / upamune
っていうやつなんですけど、基本的には特定のあるテキストから、
特定の文字列をマッチさせたいっていう。
michiru_da
マッチって抽出ってやってる?
抽出、そうですね。特定というか。
あ、見つけたい。
うぱ / upamune
そうです。
例えばめっちゃ簡単なやつだとしたら、
このいっぱいあるテキストの中から、
123-4567って書いてる文字列を見つけたいっていうふうに思ったら、
普通に例えばMacとかだったらテキストエディターとか開いて、
コマンドFして、123-4567エンターと押したら見つかるじゃないですか。
今言ったのってなんだろうな。
郵便番号っぽい形式ですよね。3桁-4桁みたいな。
そういう郵便番号っぽいものを見つけたいってなったら、
それ以外の123-4567以外のやつを見つけるのって、
至難の技ですよね。
例えば234-5678でもいいんですよね。
3桁数字があって、-があって、4桁あるっていうのを見つけようとしたときに、
普通の文字列検索だったら、あれこれどうやってやるんだろうみたいになりません?
michiru_da
あんま分かんないかも。
うぱ / upamune
例えばいっぱいテキストあるじゃないですか。
その中から数字3桁-4桁数字を何個あるか見つけてくださいって言われたら、
水谷さんだったらどうやりますか?
michiru_da
ちょっとその情報がどこにあるか。
テキストの中に。
でも分かんないか、その-の数だけ数えるとかをするかもしれません。
06:01
うぱ / upamune
いいですね。その時にもし郵便番号と電話番号もそのテキストの中に混じってたら、
例えば080-1234-ってなったら、電話番号でだいたい344、携帯だったら344とかじゃないですか。
それで多分-で数えたらめっちゃマッチしちゃいます。
michiru_da
一部正しいが全部間違ってるやつも引っかかっちゃう。
うぱ / upamune
なので3つ数字があります。-があって4個数字があります。
っていうのでマッチさせたい。
こんな感じで、フォーマットというかこういう感じなんだけど、
ここはまあ何でもいいんだよねみたいな感じにできるのが正規表現。
michiru_da
なるほど。じゃあちょっと単語がややこしいかもしれないけど、
変数みたいなのを定義するみたいな。
うぱ / upamune
まあまあそうそうそうそう。
michiru_da
なるほどね。
うぱ / upamune
そうです。なので正規表現はその実際の文字列というよりはパターンを記述することで、
それをいっぱいマッチさせることもできるし、
正規表現で電話番号を抽出しますと。
それ例えば日本の普通の固定電話のやつのフォーマットでマッチさせるとするじゃないですか。
先頭の市街局番だけ取得したいみたいな場合も正規表現だったら簡単に取れるんですよ。
全体として電話番号は例えば前は2桁から4桁かな。東京とかだったら03だし田舎だったら4桁ぐらいになるし、
中は4桁4桁で、全体のフォーマットはこれである必要があるんだけど、
前の2桁から4桁の部分だけこういい感じに全部網羅して抽出するみたいなのもできる。
今のやつでさらっと言っちゃったけど、2桁から4桁なんですよねみたいなのも正規表現だと簡単に書けるっていう感じですね。
michiru_da
そうなんだ、それは思いました。グループの定義みたいなやつをそのパターンごとに全部やらないといけないのかと思って。
うぱ / upamune
違うんですよ。
michiru_da
けどそうなんだ。
うぱ / upamune
そうなんです。
michiru_da
どういうふうに定義するんですか。
うぱ / upamune
いいですね。基本的には結構簡単に書けまして、
michiru_da
せっかくノートブックLMのスライドを作ってくれたのに多分何も参照していない気がします。
うぱ / upamune
例えばですね、実際にこういうここに正規表現を書くところなんですけど、よくこういうサイトがあります。
これさっき言ったような正規表現を実際に試せるようなサイトです。
09:03
うぱ / upamune
こんな感じでPHPの正規表現だったり、JavaScriptの正規表現だったりっていうのがこんな感じで選べるようになっています。
なんでさっき言ってたような、例えば08012345678ってテキストで並んでたり、これ郵便番号っぽいやつですね。
3桁4桁みたいな感じのときに、この郵便番号だけ抽出したいなっていう。
例えばこんな感じで、こっちは090って並んでたり、この下に郵便番号がこんな感じで並んでるときにあるんですけど、
まず文字がどういうものかっていうのは最初に書くんですね。
例えば数字だったら、このカッコの中にどういう文字かっていうのを書くんですけど、
例えばABって書いたら、AがBどっちでもいい。
なんで、0123456789って書いたら、数字だったらどれでもいい。
michiru_da
そういう感じで書くの。
うぱ / upamune
これ簡単に書くことができて、0から9だったらなんでもいいっていう感じで書けます。
0から9が3つ連続しているのをこんな感じで書けるんですけど、
そうすると、4つ中3つあるときもこう。
michiru_da
そういう感じで書いたら完全一でなくて、部分一でも当たっちゃう。
うぱ / upamune
そうです。
michiru_da
部分で書く前方なのかな。
うぱ / upamune
で、今書いてるのは大きなカッコの中に0から9って書いて、
これはどういう意味かというと、0から9の中だったらどれでもいいよっていうのが3つ並んでます。
で、郵便番号なんで次に来るのはハイフンですよね。
こう書いた時点で郵便番号の先頭にもマッチしていますし、
携帯の080とかのどこにもマッチしてるし、携帯の真ん中の4桁の後ろ側にもマッチしている。
michiru_da
すごい急に分かんなくなった。
うぱ / upamune
これはただ3桁の数字が並んで、ハイフン。
これ別に先頭とか関係ないです。
michiru_da
3桁の数字を示す0から9、3つ並べた後にハイフンってついてるんですけど、
090ハイフンとか2つ目のブロックプラスハイフンとかも引っかかってて謎ですね。
1個目の0から9と2個目の0から9の間にハイフン書かなくてもいいんだみたいな。
12:00
うぱ / upamune
これですか、ここですか。
これにハイフンもこんな感じですか。
michiru_da
そうそう、そういう風に書きたくなりそう。
うぱ / upamune
これを書くとこうなりますね。
0から9何個でもいいですっていうのを、0から9のどれかの文字っていうのをまず3回並べてるんですね。
michiru_da
そういうことか。
これで080ハイフンをようやく示せた。
うぱ / upamune
そうですそうです。
michiru_da
なるほど、理解しました。
うぱ / upamune
だからあとはもう。
michiru_da
全部の番号のブロックみたいな感じで思っていました。
なるほど。
うぱ / upamune
ではないです。
michiru_da
また1つ目、1ブロック目の話だったね。
うぱ / upamune
そうです。
なのでここから郵便番号なんで、数字が3桁ハイフン4桁なんで、
この0から9っていう記述をあとは4回繰り返せばっていう感じになるんですけど、
これだとまだ問題がありますよね。
電話番号も最初3桁で真ん中4桁だから、電話番号もマッチしちゃうやんっていう感じなんですけど、
さっきあの多分直感的じゃなかったと思うんですよね。
この数字の3つって繰り返したら、この080、123、090、235だけ引っかかってくれやって思いません?
この真ん中の123とか。
それ自体も正規表現で書けるんですよ。
その行頭から始まるみたいな。
同じようにこれで終わりですっていうのも示せますよね。行末っていう。
michiru_da
数字が4つ並んでるのか3つ並んでるのか。
うぱ / upamune
それがどこから始まってるのかっていうのを。
じゃあ今試しに行頭から3つ数字っていうのをやってみると、
多分この080、123、090、235しかマッチせずに他のやつはハイライトされないって感じになるんですけど、
これですね、キャレットっていうやつをやったら、
先頭から3つ数字が連続するところだけにマッチするっていう状態になりました、今。
michiru_da
すごい。
うぱ / upamune
で、さっきみたいに配布もやって、数字を1、2、3、4つけて、もうちょいですね。
行末、一番お尻を示すのはドルなんで、ドルって書いたら、
先頭から数字が3つ、3桁並んで、配布があって、4つあって、お尻がありますっていうのにだけマッチするんで。
michiru_da
素晴らしい。なるほど。
先頭を示す記号と終わりを示す記号は別なんですね。
うぱ / upamune
そうです。で、これもうちょっと簡単に書けて、この0から9ってめっちゃ品質なんですよ。
なんでこれは、ほぼ全てのところでディジットのDですね。
で、置き換えることができるんで、こんな感じで。
0から9は同じですね。
で、これもっと簡略化することができて、D、同じものが何個続くみたいなのも品質なんですね。
15:07
うぱ / upamune
なので、こんな感じで、この数字がN個続くみたいなのとか、この前のやつが何個続くっていうのは、この大括弧、中括弧で表すことができるっていう感じですね。
michiru_da
すごい。めっちゃ短くなりました。
うぱ / upamune
そうそう。これもやるのが正規表現です。
michiru_da
確かに便利そう。
うぱ / upamune
だからなんだろうな、よくあるのが、この-Dをこういうのにもできるんで、BCの0、1、2、3、こういうのにマッチして。
michiru_da
なるほどですね。
うぱ / upamune
これはAからZって小文字だけのアルファベットで、こんな感じで、アルファベット3文字-数字4桁の文字列だけにマッチするんで、
よくあるやつだと、全部ABCって書いてるの大文字にしたいんだよなーみたいな時に、正規表現でマッチさせて、マッチしたやつだけ大文字に変換みたいなのをめっちゃ簡単に書けるみたいな。
michiru_da
なるほど。
うぱ / upamune
っていうのが正規表現ですね。
これでなんで技術書500ページ必要なんだよ。
michiru_da
いや、そう思いました。
うぱ / upamune
概念は?
michiru_da
うん。やっぱ検索に付随する技術なんですか?
うぱ / upamune
そうですね。それ自体が検索っていうのもあるし、テキスト抽出みたいな時が多いですかね。
いっぱいある中からパターンはこれなんだよみたいなのがあるときに使うっていう感じですかね。
うぱ / upamune
これもっといろんなことができまして、例えば郵便番号って今までこの3桁4桁で書いてたじゃないですか。
で、こういう悪い人もいて、配分書かない人みたいな。その時に配分って別にあってもなくてもいいんだよなーみたいな。
3桁4桁にマッチしたいみたいな時は、ハテナを書くと、このハテナの前のやつがあってもなくてもマッチするようになるんですね。
michiru_da
へー。すごい。
うぱ / upamune
そうなんです。とか、あとは変な国の郵便番号だったら、配分が2つありますみたいな時に、この2つでもマッチさせたいし、1個でもマッチさせたいんだよなーっていう時、
18:08
うぱ / upamune
こういう時は、さっきのはハテナみたいな特殊な文字があるんですけど、ハテナは前の文字があってもなくてもいいだったじゃないですか。
けどこのプラスは、1つは必要っていう。1つ以上だったら何個でもいいみたいな。
なのでさっきの配分がないやつはマッチしてないですよね。で、これを3個とか4個とか5個とか増やしてもマッチするんで、
これのユースケースは、それこそ正規化するときめっちゃ便利ですね。この配分を何個入れようが、ここの数値の部分は取れるんですよね。
なので最終的にこの配分は1個にするみたいなのをめっちゃ簡単に書けるとかですね。
そうですね、このさっきの数字みたいなところを普通の丸括弧でくるんだらグループ化っていうのができて、
そのプログラミング、プログラムを書いてる時に簡単にその前のグループを取る、後ろのグループを取るみたいなのが簡単に書けるようになります。
さっき説明したのはプラスとハテナですけど、アスタリスクも使うことができて、ちょっと違ってそう、ゼロ個以上ですね。
なくてもいいんだけど、あってもいいっていう感じです。
さっきの行頭行末とかはアンカートドルとかですね。
あとはドットっていうのは結構よく使いますね。
ドットはなんでもいい1文字みたいな。
なんでもいいから1文字ないとダメみたいな。
それがなんで嬉しいかっていうと、ドットプラスみたいなことを書くことで、なんでもいいんだけど1文字以上あるみたいな感じで表せるんですよ。
すごい飲み込み早すぎるな。
michiru_da
飲み込みとかそうかって。
これ誰が作ったの?
うぱ / upamune
確かに。
なんか普通の考えではないですよね。どうなんだろう。
でも多分人間的にパターンで認識してるみたいなのは結構あって、これは郵便番号ですか?って聞かれたときに、
いやこれ郵便番号じゃないなってわかるけど、やっぱ3桁配分、4桁みたいなのを記述したいってなったときに、
どう言語に落とすかっていう1つの開放が。
michiru_da
なんかすごく汎用性にこだわりを持った人が作った考え方という感じがします。
うぱ / upamune
確かに。ちょっと今の間に。
ここでも書いてるんですけど、電話番号とか郵便番号をコードで書くと、積表現なしだと結構めんどくさい。
左から読んでいって、次は数値がくるよね、数値がくるよね、数値がくるよね、配分がくるよね、数値、数値、数値、数値、みたいな感じでやっていかないといけないっていう感じなんですけど、
21:12
うぱ / upamune
積表現だったらさっきみたいにピッて、配分Dでっかい括弧3、配分、バクサラDでっかい括弧4みたいなのを書くだけで、郵便番号になるっていう。
michiru_da
さっき言ってた、頭が2桁だろうが4桁だろうがいい感じに書けるのも。
うぱ / upamune
そうですね、量子定詞っていう、大学校の中に3って書いたじゃないですか、あれを確か、
michiru_da
中学校ね。
うぱ / upamune
中学校。中学校で、2、ビデオではなくて。
michiru_da
かんま。
うぱ / upamune
かんま。かんま4みたいな感じで書いたら、2から4みたいな感じになる。
michiru_da
なるほど。
うぱ / upamune
その感じで簡単に書けるんで。
michiru_da
さっきのいろんな用法のとこも僕は見てるんですけど、グルーピングときた数と使う文字の定義みたいなのが主な、よく使うやつみたいな感じなのかな。
うぱ / upamune
そうですね、だいたいプログラムから使うときはグルーピングして、マッチしたところのあるグループを取得したいとかがよくありますね。
michiru_da
ありそう。
うぱ / upamune
何年何月何日って書いてたら、年のとこだけ取得したりとか。
michiru_da
なんかそれってどう…いやなんか、エンジニアの人すごいなってなったけど、それを実現する方法って多分何個かあるじゃないですか。
私なんか、あってるかわかんないけど、SQLで変換するとかもできそう。
SQLでできるかわかんないけど、いつもSnowflakeしか使ってないからそういう感じで考えてるけど。
なんか変換をして年月を抽出する方法もありそうだし、今の正規表現です。
正規化してその値を取る考え方もあって、そのたぶんどのソリューションを使うかみたいなのがめっちゃいっぱいあると思うんですけど、そこから選んでるんですねってなりました。
うぱ / upamune
はいはい。それで言うと、この正規表現の今みたいにいっぱいテキストがあるところに、こういう特定のフォーマットで年が4桁、月が1桁か2桁、日数が1桁か2桁、日ってなるのを全部抽出するっていうタスクは、結構正規表現じゃないとめんどくさいなっていう。
michiru_da
もう得意なんですね。
うぱ / upamune
正規表現がもう。
そうですね。パターンでの一致。実際の値だったら簡単にSQAとかでウェアとか書けばいいじゃないですか。
けどこのパターンで何か具体的な値があるわけじゃないんだけど、パターンで一致させるっていうのが正規表現の強いところですね。
24:05
michiru_da
じゃあ書き方が決まってるやつは正規表現が取得するのがやりやすい。
うぱ / upamune
そうです。こういう感じでマッチしたいみたいな。
さっきの。
正規表現は1951年に数学者によって開発されたんですね。アメリカで。
michiru_da
この人何するときに。この人もプログラミングを実質やってた。
なんか論文を書くときにこの概念が作られた。
全くわからない。文字列パターンの表現や認識に極めて有効であることが後に証明されました。
じゃあ別に作った時はそれ用じゃなかったのか。
うぱ / upamune
これにも使えるじゃんみたいな話なのかな。
michiru_da
なんかかっこいいな。
うぱ / upamune
正規表現マジでなんだろう。汎用的すぎる。
結構あれですよね。正規表現でこういうのが欲しいんだよな。
こういう文字列にマッチさせたいんだよなっていうときに正規表現でパッと書ける人はかなりいないと思いますね。エンジニアでも。
michiru_da
どういうこと?
うぱ / upamune
さっきみたいに例えばこれは先頭。めっちゃ簡単な例でしたけど先頭は2から4桁の数字があってここはこういう文字が続いてこれはあってもなくてもいいんだけどみたいなのを。
michiru_da
文法覚えてるかっていうかはいい感じにパターン化するのが難しいってこと?
うぱ / upamune
まず最初に多分パターン化の難しさがあってその次に文法の話があるんだと思います。
だから結構正規表現はミニプログラミング言語みたいな感じなんですけどこれがサクサクできるエンジニアじゃない人はかなりプログラミングに向いてると思います。
michiru_da
うぱさんはサクサク書けるんですか?
うぱ / upamune
書けないですね。でもだいぶ500ページの袋本を読んだおかげでめっちゃ困ることはなかったですね。
michiru_da
結局あの袋本は何がいっぱい書いてあるかって喋ったんですか?
うぱ / upamune
こういう、一章で今言ったような特殊な文字。行末とか行頭にマッチさせるとか、2の文字にマッチさせるドットとかそういうのをバーって言って
そこからどんどんじゃあこういうのはどうやってマッチさせるかなみたいな感じでやってくるという感じですね。
michiru_da
ささやかなメールユーティリティ。
うぱ / upamune
この時はメール便利だったんでしょうね。
この方言の話とかもありますね。
michiru_da
手続き型。
27:01
うぱ / upamune
でその後にどうやって動いてんねんみたいな話とかがありますね。
michiru_da
めちゃくちゃ量あるな。
よく読めますね。
うぱ / upamune
いっぱいありますね。
michiru_da
これって今はそれこそこうPDFをAIに入れてなんか困ったらそれをなんか実務で一回読んでこれなんだなと思って実務で困ったら聞いてやるとかできるけど、
前はみんなそれを紙で引いてやってたって感じなんですか?
うぱ / upamune
正規表現ですか?
michiru_da
うん。なんか一回読んで覚えられない。
うぱ / upamune
無理です無理です。しかも正規表現です。合ってるかどうかもわかんないし。
michiru_da
合ってるかどうかもわかんない。
うぱ / upamune
わかんないです。多分今までめっちゃ簡単な例を見てたんで多分パッと見てわかったと思うんですけど、
例えばそのメールアドレスの正規表現って多分なんか意外といけんじゃないみたいな感じで多分今思われてると思うんですけど、
メールアドレスの正規表現って多分かなり難しいというか何書いても多分間違いなんですよ。
そういうのでメールアドレスの正規表現って。
michiru_da
有名な問題なんだこれは。
うぱ / upamune
有名な問題というか大抵こういう。
michiru_da
てかなんかすごいことになってる。
うぱ / upamune
そうなんです。正規表現というのは。
michiru_da
全くわかんない。見てすごいな。
うぱ / upamune
正規表現というのは基本こういうものなんですよ。
すごい。暗号じゃん。
そう。
michiru_da
こういうものなんですって言って、ポドキャストだけ聞く人はわかんない。
うぱ / upamune
もう本当に暗号みたいな感じですよね。
でもみちらさん今なら読めるはずですよ。このよく見るアットマークがありますよね真ん中に。
メールアドレスのアットマークだ。
先頭からこれは絶対行頭から始まって、この中は許される文字が並んでますと。
小文字のAからZ、大文字のAからZ、0から9とアンダースコア。
michiru_da
そうか。
うぱ / upamune
こっちのドットプラスマイナスは普通に記号としてのドットプラスマイナス。
それが1個以上を並んでるっていう。それがアットが来るよっていう。読める。
しかし後半は難しい。
michiru_da
そうなんだ。
うぱ / upamune
ドメインの部分ですね。許されるドメインっていうのがどういう書き方かっていうのがありますね。
これなんか普通のメールアドレスとかだったらこれでいいんですけど、
確かドコモのiモード時代のメールアドレスに使用できる文字が、普通は使用できない文字があって、
それをこういう正規表現を書いてると、そのユーザーたちが登録できなかったみたいな話とかあって、
正規表現っていうのは一筋縄じゃいかない。
michiru_da
なるほど。例外には弱いんですね。
うぱ / upamune
そう。なんで例外を作ろうとすると途端に複雑になっていく。
michiru_da
やばそう。
うぱ / upamune
そうなんですよ。
michiru_da
面白いな。
うぱ / upamune
え?もしかして正規表現向いてる?
michiru_da
いや。
うぱ / upamune
他のより?
30:01
michiru_da
やっぱりユースケースが限られるのが面白いですね。
うぱ / upamune
うんうんうん。
これなんか壊れてるな。
michiru_da
今もメールアドレス正規表現のページが表示されています。
そうだ先読みってさっきもオライリーの本の目次にありましたね。
うぱ / upamune
そうなんです。
なんかそうだな。どの例外かな。
例えば否定先読み動画だったらちょっとユースケースがあるかもしんですね。
例えばエンZINEやって伸ばし棒を使わないみたいな。
フォルダーじゃなくてフォルダー。
michiru_da
フォルダー?プリンター?
うぱ / upamune
そう。その時に難しい。普通の検索で難しいのは、
フォルダーにはマッチしてほしくないけど、
フォルダーにマッチしてほしいってめっちゃ難しくないですか。
それができるんです正規表現なら。
例えばフォルダーって普通に書くじゃないですか。
このフォルダーっていうのを普通にマッチするのを書いて、
うぱ / upamune
その後に配分が来たらマッチさせるなっていうのを、
はてなびっくりとか書ける。
michiru_da
そんな指定ができる。
じゃあフォルダーに何かを入れるみたいな文章に当てたいときに使うってこと?
うぱ / upamune
そうです。フォルダーにホゲホゲを入れる。
けどフォルダーには入れない。
その時に例えば、逆に私が広報の人だとして、
いや一般的にフォルダーじゃなくてフォルダーなんだよなっていう時に、
めっちゃむずいんですよ。
これを一括でフォルダーをフォルダーにしたいっていう風に思ったとするじゃないですか。
この時正規表現を使わないでやると、
フォルダーをフォルダーにすると、
最初からフォルダーになってた時が伸ばし棒2個になっちゃうんですよね。
なのでフォルダーにだけマッチさせて、
フォルダーに置換するみたいなのが簡単に書ける。
michiru_da
確かに。
WordとかGoogle Docsの置換だと伸ばし棒2個になっちゃいます。
今のパターンだと。
うぱ / upamune
ちなみにたぶん隠れたところに正規表現オプションみたいなのが。
michiru_da
なんかありそう。
うぱ / upamune
あって使えるのもありますね。
後は先読みっていうやつで、
今までのやつって正規表現ってめっちゃ順番が大事だった。
例えばこの例であるのは、
リンゴ、みかん、メロンっていう3つの単語がある時に、
どの順番になってもいいんだけど、
リンゴ、みかん、メロンでも、
メロン、みかん、リンゴでもいいんだけど、
これをマッチさせたいっていう時に、
それも先読み、肯定先読みっていうのを言うので、
検索できますよっていう感じですね。
まずリンゴっていうふうにマッチしたら、
先にみかんある、メロンあるっていうのを確認して、
あったらさらに先に進むっていう。
michiru_da
なるほど。
うぱ / upamune
こんな感じで本当にいろいろなパターンも。
michiru_da
パターンが決まってたらもうめっちゃそれは何とでもなるみたいな感じがします。
33:00
michiru_da
なるほどね。
うぱ / upamune
さっきまで言ってた検索とかだったら、
こんな否定先読みとかだったら普通に書けるんですけど、
LLMの時代って結構もうめちゃくちゃ難かったんですけど、
今ならこういうのにマッチしたい正規表現書いてって言ったら、
michiru_da
確かに。
うぱ / upamune
ほらどうぞって。
michiru_da
言ってくれそう。
うぱ / upamune
正規表現が自分自身書けなくても、
なんかこのいっぱいある文章の中からこれを抽出したいよっていう時に、
正規表現っていうワードを知ってるだけで、
LLMにお願いすることができるんで、
今のすごい賢いLLMとかだったら、
例えば郵便番号形式で抽出してって言ったら、
1回その正規表現を書いて抽出してくれたりすると思いますけど、
普通にLLMに抽出してって言って、
最初からこうなんだろう、
LLMの知能能力だけでやってると、
先頭3件だけちゃんと見つけてみたいなのはあると思うんで、
正規表現でみたいなパターンで取りたいときは、
そのワードを知ってると多分いい感じになると思いますね。
michiru_da
面白い。
先読み後読みって言うんですね。
そうなんです。正規表現。
仲間になりました?友達になりました?
まあなんとなく分かりました。
だからよく設定とかにあるんですよね。
うぱ / upamune
何が入ってくるかわかんないけど、
こういう形式のテキストには許可したいというか、
michiru_da
マッチしたいというか。
報道の指定とかにめっちゃ役立つんだろうなという気がしてます。
確かに。
うぱ / upamune
うちの会社の機関システムの裁判のフォーマットはこういう感じなんだよね、みたいな。
先頭が必ずAから始まって、みたいな。
うぱ / upamune
ときにプログラムが書けなくても、
これプログラムという見方あるけど、
正規表現を書けば。
michiru_da
便利だ。
うぱ / upamune
でしょ?
明日から正規表現マスターになる。
LLMに。
michiru_da
LLMお願いマスターになる。
うぱ / upamune
という感じですね。
パターン。文字のパターンを記述する表現言語という感じです。正規表現。
michiru_da
パッと見て本当に何が書いてあるかわからなすぎるからなんだと思ってたけど、そういうことだったのかと思いました。
うぱ / upamune
実際の正規表現。
さっきもメールアドレスの前半部分は読み解けましたもんね。
michiru_da
そうですね。教えてもらえると。
勉強になりました。
うぱ / upamune
珍しいですね。ミチルダも納得のテック界。
michiru_da
コスパがいいというか、本当にシンプルにこの条件を特定したいみたいなときにめっちゃ使える汎用的なものなんだなと。
うぱ / upamune
そうです。だいたいどこの言語だけじゃなくて、いろんなアプリケーションにこの正規表現実装されてるんで、
36:03
うぱ / upamune
1個覚えておけばコスパいいですよね。
多分スプレッドシートとかにもあると思いますよ。
michiru_da
ありそう。
うぱ / upamune
だから、こういうパターンで見つけたいとか、自感したいなというときは。
michiru_da
確かに。次は正規表現でやってみよう。
うぱ / upamune
使ってみてください。
michiru_da
勉強になりました。
うぱ / upamune
よかった。
michiru_da
なんかこれ正規表現、教えて正規表現やろうって言ったの結構前なんですけど、最初に出たの。
うぱ / upamune
何があったんだ?
michiru_da
なんか、うぱさんがちょっと正規表現はなぁみたいな、ちょっとなんだろう。
うぱ / upamune
しぶってた?
michiru_da
なんだっけな。なんかさ、めんどくさいとかじゃなくて、なんか諸説あるみたいな感じで言ってたんですよ。諸波あるみたいな。
うぱ / upamune
うんうん。
michiru_da
で、だから、うんって言ってちょっとしばらく寝かされてたんですけど。
うぱ / upamune
うん。あれは何だったんだって。
michiru_da
そう。
うぱ / upamune
なんだろうね。正規表現って方言もあるから。
michiru_da
言ってって言ったのかな。そうか。
うぱ / upamune
そうそう。この言語だとこれが使えるけどこれが使えないみたいな。
さっきのどっちだろう。肯定先読みか否定先読みかが使えないエンZINEとかもあるんで。
michiru_da
うーん。
うぱ / upamune
でもね、たぶんね、LLMだとこれで使う正規表現書いてって言われたらちゃんと考慮して書いてくれると思います。
なんでその正規表現書いてって言って書いたやつをなんかJavaScriptにしたら全然マチせえへんやんけみたいな感じになるときは、ちゃんとなんかJavaScriptで使う正規表現でって書いて。
michiru_da
重要な情報。
うぱ / upamune
あとね、正規表現は結構ね、大変なことになることもあるんで、これって文字列を評価してるんで、正規表現の、さっきみたいなこのめっちゃむずい正規表現とかあるじゃないですか。
そうすると正規表現をやるコストが爆上がりして、それでなんかシステム落とすみたいなやつとかもできちゃうんですよ。
michiru_da
そんな重たい正規表現。
うぱ / upamune
そうそうそう。なんで。
michiru_da
例外パターンに対応していったら大変なこと言ったでしょ。
うぱ / upamune
そうなんですよ。リドスですね。
michiru_da
なんか映してます。
うぱ / upamune
なんかドスっていうドス攻撃みたいなのがあると思うんですけど、リはレギュラーエクスプレッションの。
michiru_da
へー。
うぱ / upamune
それで正規表現をピュって入れることで、例えばめっちゃ簡単なやつだったら一瞬で終わるんですけど、
例えば177秒もかかっちゃうとかそういうのがあるんで、
うぱ / upamune
例えばさっきのメールアドレスのところに正規表現を書いてたら、
ユーザーが入力するたびにそのユーザーで入力を3分ぐらいずっとそのユーザーのバリデーションするために正規表現を走ったりするのを、
同じユーザーが何回もこうやってたらシステム止まっちゃうみたいなのがあるんで、
39:04
うぱ / upamune
そういう危ないのもありますよっていう感じですね。
そういうのに対応しているライブラリーとかもあったりするんで、
難しい正規表現を使って何かやりたいよっていう人はそこら辺も、
多分LLMに言ったら、リドス大丈夫そうって言ったら何とかしてくれるんじゃないでしょうか。
ええ時代やでほんま。
michiru_da
ありがたいですね。
うぱ / upamune
ありがたいですね。
スプレッドシート見てみましたけど、ありましたね。
michiru_da
めっちゃ正規表現って書いてある。
うぱ / upamune
正規表現を使用した検索。
なんかヘルプも、正規表現ヘルプもあるっぽいですね。
michiru_da
助かる。
うぱ / upamune
皆さんもぜひ正規表現を使って、我々と同じように効率中になりましょう。
michiru_da
なりましょう。私は一回も書いたことはないです。
うぱ / upamune
確かにもう今書くことないよね。
michiru_da
面白かった。ありがとうございました。
ファンの質問フィードバックは、
Xのハッシュタグ、Magical FM全部小文字、または概要欄のお便りフォームまでお寄せください。
Spotifyのベルマークを押すと更新通知が届きますので、そちらもお願いします。
ありがとうございます。
うぱ / upamune
ありがとうございました。
40:20

コメント

スクロール