強まっていこう

あっちゃこっちゃへ強まっていくためのブログです。

毎度忘れる正規表現代表格 肯定否定先読み後読みの覚え方のコツ

毎回忘れてググる人多いでしょ?まぁ覚える必要も無いんですが、簡単に覚えられるので自分なりのコツを。

後ろにその文字が無いとダメ、あったらダメ
前にその文字が無いとダメ、あったらダメ

この4パターンがあるわけですが

何かしらの文字(?=無いとダメ)

(?<=無いとダメ)何かしらの文字

まずこの2つを覚えましょう。

(?=) は後ろ側にその文字が無いとダメなことを表しています。

(?<=) は前側にその文字が無いとダメなことを表しています。

?= の間に < を入れて前に押しやる(シフトする)イメージで覚えておくと良いです。

これらの = を ! に変えると、あったらダメに変化します。

何かしらの文字(?!あったらダメ)

(?<!あったらダメ)何かしらの文字

こうやって覚えるといくぶん覚えやすいんじゃないでしょうか。

実はすごく大したことない代物なんですが、日本語名がいかつすぎるのと記号がいまいちなので覚えづらく感じるんだと思います。


以下は自分なりの勝手な解釈と意見です。混乱するんで、よくわかっていない人は読まない方が良いです。

() って正規表現ではグルーピングしてキャプチャするんですが、(?: とやるとキャプチャしなかったり (? は通常のグルーピングと違う扱いにするぞという意思を感じます。(?= も同じで通常のグルーピングとは違った上で、その位置にその文字があることを表したかったんだと思います。

じゃぁ、前が (?=) で、後ろが (?>=) で良かったじゃん、って話ですね。正規表現を決めた側からすると、ある文字がマッチしてその先を読んでそいつがあるなし、という判断をするから、という感じなのでしょうが、そりゃあくまで正規表現の実装を行っている側の発想ですからね。使い手側のことを考えていない。だからこそ混乱するわけです。

普通の頭の人間が理解しやすい形は

(?=)xxxxx(?=>)

(?!=)xxxxx(?!=>)

だと思いますね。

エンジニアの逃げ口上「わからない方がわりぃだろ?」を相手に押し付けるのは簡単です。が、実際混乱は起きています。よそのプロダクト等を眺めて、なぜ混乱が起きているのか?を考えることってすごく大事だと思います。そして自分では、混乱が起きないようなものづくりを心がけていく。とても大切なことです。