📌
小ネタ:正規表現で「前後に〇〇がつくorつかない」のマッチ
前後の条件を指定して特定文字列を検索したい時が、しばしばあると思います。
具体例
例えばHoge
クラスのインスタンスと思われる記述を探したいとします。
単純に考えると、インスタンスは大抵hoge
という名前の変数で参照されるので、hoge
で検索します
でも似たような名前のFugaHoge
クラスとかHogePiyo
クラスがあるとfuga_hoge
とhoge_piyo
も検索に引っかかってしまってめんどくさいです。
こういう時、_hoge
とかhoge_
とかは検索結果から除外したいです。
後読み/先読みアサーションを使おう
こういう場合は先読み後読みアサーションが便利です。
上記の例であれば、以下の正規表現により求める結果が得られます。
(?<!_)hoge(?!_)
最初の(?<!_)
の部分は後読みアサーションと言って、「hogeの前に_がつかない」にマッチします。
最後の(?!_)
の部分は先読みアサーションと言って、「hogeの後に_がつかない」にマッチします。
もちろん「つかない」だけではなく「つく」場合の表現もあり、それぞれ(?<_)
, (?=_)
みたいに書けます。
正規表現便利!
参考
上記以外にもいろんな表現が解説されている大変ありがたいページ🙏🙏🙏
正直上記ページ見ればいいんだけど、特によく使う気がしたのでユースケース含めてピンポイントで記事にしてみました。
Discussion