(これは2010-08-06に書いた故OCNブログの記事を移植したものです)
ある文字列を「含まない」行を正規表現(Regex)で検索したいとき、先読み機能が使えるPerlやPython、.NET、ECMAScriptなどでは、下記のようにします。
^((?!foo).)*$
先読み機能がないと、かなり面倒になります。
Visual StudioのRegexにも、一応似たような否定先読み機能があるみたいです。
^(~(foo).)*$
Visual StudioのRegexはプログラミングに特化した方言になっている模様。*1
ちなみに、EOF(End of File)の直前が改行でないようなファイルを検索したい場合、例えばファイル末尾が
}[EOF]
とか
//[EOF]
とかになっているものを検索したいとき、Visual Studioでは
.+~(\n)$
という正規表現になります。
改行で終わらない行はしばしば問題を引き起こすことがある(ソースファイルをパースするコンパイラやアセンブラだけに限らない)ので、理解のあるプログラマならば、自分の書いたソースファイルを編集するときには常に注意しているものですが、他人が書いたコードを保守する場合など、不整合のあるファイルを一括検索したいときにはこういった正規表現が役立ちます。
※2021-06-28追記:
VS2017以降は標準でEditorConfigに対応しているので、insert_final_newline=true
に設定した .editorconfig ファイルを配置しておくのがベストです。
*1:Visual Studio 2010までは、独自の正規表現構文になっていました。2012以降はVisual Studioマクロの廃止と併せて、.NET同等の正規表現構文に仕様変更されたようです。