お帰りなさい｡
これまでは､ 単純なパターンしか見つかっていませんでした｡
私たちの文字列の中のシンプルなテキストパターン｡
特に変わったことはありません｡
しかし､ 正規表現が本当に便利になるのは､ 高度なパターンである｡
正規表現を使うと､ 例えばこんな風に､ とんでもないパターンを作ることができます｡
しかし､ これは正規表現では意味がある｡
正規表現は､ それ自体が､ テキストの中のパターンを見つけるために使用するさまざまなパターンを持つ､
完全な言語であると考えることができます｡
さて､ 正規表現の世界は本当に､ 本当に複雑です｡
プログラマーとして､ これらのパターンをすべて覚えろとは言いません｡
こちらでその一部を見ることができます｡
スラッシュDDは､ 0から9までの数字を含む文字列のマッチを返すというような意味の特別な配列があります｡
ここにあるセットのように､ 正規表現を入力すると､ AからZまでのアルファベットの文字が､
小文字でも大文字でもマッチして返されるんだ｡
だから､ 正規表現にはちょっとしたショートカットやトリックを書き込むことができるんだ｡
そして､ 物事は本当に､ 本当に複雑になるのです｡
だから､ 実際には誰もこういうことを暗記していないんです｡
必要な時に必要な分だけ開発する｡
実は､ このビデオの後半で､ 実際にこの実験をして､ パスワードチェッカーとメールチェッカーを作る演習をします｡
さて､ 私がとても気に入っているツールのひとつに､ RegEx 101というものがあります｡
超､ 超便利です｡
Pythonを選べば､ 正規表現とテスト用地が提供されます｡
例えば､ Hey, how are you.というようなことを書いたとします｡
ここで正規表現を入力して､ いろいろと試してみることができるようになりました｡
だから､ 例えば､ Heyと入力すると｡
お元気ですか？
うーん｡
まあ､ これは本当にダメなんですけどね｡
このあたりで引用を加えてもいいかもしれませんね｡
でも､ ダメなんです｡
そして､ 実際に何が使えるか､ いくつかの選択肢と情報を与えてくれます｡
そこで､ 例えば､ 「もし」を調べるとします｡
さて､ ここで､ AからZ､ またはAからZの範囲にある文字｡
これをコピーすると
そして､ それを貼り付ける｡
あれを見てください｡
私の持っている試合をフルに発揮してくれます｡
この場合､ ちょっと､ AからZの間のどの文字にもマッチしているかどうかをチェックしているのです｡
小文字と大文字の両方｡
今､ すべてがマッチしています｡
こちらには､ マッチ1､ マッチ2､ マッチ3......とありますね｡
グループ分けもできるので､ ここでブラケットをすることもできますね｡
そして今､ これが最初のキャプチャーグループです｡
そして､ ここで別のことをすることもできます｡
ここで､ 私が欲しいものを言ってみましょう｡
では､ ここではどのような意味があるのでしょうか｡
さて､ 右手に解説がありますね｡
最初のキャプチャグループは､ 「おい､ 下のリストに存在する1文字にマッチしろ」と言っています｡
つまり､ AからZまでを教えてくれるわけです｡
キャピタルAからZまで｡
そして､ 2つ目のキャプチャーグループは､ おい､ 下のリストに存在する1文字､ つまりaにマッチする｡
さて､ この中に2つのキャプチャーグループがあります｡
つまり､ 第1捕獲グループ､ そして第2捕獲グループというわけです｡
ここにドットを付けると､ 特殊な意味を持つ正規表現になり､ カーソルを合わせると､ 行末を除くすべての文字にマッチすることがわかります｡
それで､ 私はここで何をしているのですか？
さて､ 私は最初に持っています｡
おい､ 最初の捕捉グループ､ つまりAからZの間の任意の一文字をチェックしてほしいんだ｡
そのあとは､ どんなキャラクターでもいいんです｡
そのあと､ aに一致するものがないかよく探してほしい｡
だから､ このようなマッチングをするのです｡
任意の文字とスペース､ または任意の文字とAを探すので､ Wと一致するかもしれません｡
これでW2Aのフルマッチ､ そしてグループ1が揃ったわけです｡
というのは､ 第1グループと一致し､ 次に第2グループと一致し､ Aと一致するからですw｡
今､ 私はこのことが分かりにくいと思っています｡
正規表現は､ 最初に理解するのが本当に難しいものの一つです｡
では､ どのような使い方ができるのか､ ご紹介しましょう｡
ここでコードジェネレーターにアクセスすると､ Pythonで使えるサンプルコードが表示されるのがわかります｡
でも､ 私が好きなのは､ この文章を実際にコピーすることです｡
こんな感じ｡
そして､ コードエディタに戻り､ コンパイルで｡
貼り付けてください｡
ここでRがあることにお気づきでしょう｡ Rは生の文字列を表し､ Pythonではスラッシュ・バックスラッシュのようなものは特別な意味を持つからです｡
なぜなら､ バックスラッシュを使えば､ 改行やタブのような特別なことができることを思い出してください｡
Rは､ 「おい､ これは生の文字列だ」と言う｡
Pythonインタプリタが解釈しそうなものは全て無視する｡
これは純粋な文字列にしたいので､ 正規表現でよく目にするものです｡
さて､ このコードを実行すると
ここにACAがあるのがお分かりになりますか？
今回も､ 私が検索しているからです｡
文字に続き､ aが続くもの
そして､ ここで検索しているグループがあったとして､ グループ1を行うと｡
グループ化すると､ Sがつくんです｡
ここの遊び場のときと同じようなのが出てくるんです｡
もうひとつ､ 便利なものが入っています｡
クイックリファレンスを見ると､ 実際にいろいろと検索できるようになっています｡
例えば､ ある文字列の先頭が "Maybe "であるかどうかをチェックしたいとします｡
ここでスタートと入力すると､ クイックリファレンスが表示されるのがおわかりいただけると思います｡
だから､ もし私が文字列を開始したら､ 「この文字を使ってください」と表示され､ 文字列を開始するのに役立つのです｡
例えば､ このニンジンを使って､ 「ほら､ これと同じだ」と言えば､ 私の場合は一致します｡
だから､ ちょっと､ 行頭の位置をアサートしてくださいということなんです｡
その仕組みがここできっちり説明されており､ ここで完全一致を告げられる｡
さて､ ほとんどの場合､ 正規表現の使い方はこのようなものではありません｡
自分で全部考えていると､ 実は結構大変なんですよ｡
さっきも言ったけど､ こういうのって誰も暗記してないんだよね｡
一般的なトークンを使ったクイックリファレンスが用意されているので､ 目を通して理解することができます｡
しかし､ 実際に正規表現を学ぶには､ 実際の使用例を見てみるのがより実践的な方法です｡
では､ 私の経験からよくあるパターンを知りたいという方のために､ いくつかのエクササイズを残しておきますね｡
これは､ 面接で誰かに聞かれるようなことではありません｡
正規表現を暗記する必要はあまりない｡
何をするのか知っていればいいんです｡
だから､ よかったらエクササイズを試してみてください｡
そうでなければ､ 次のビデオで､ 実際のシナリオで正規表現をどのように使うか､ 具体的にお見せしましょう｡
その中でお会いしましょう｡
バイバイ｡