読者です 読者をやめる 読者になる 読者になる

正規表現でgrepする

grepと言えば、指定したファイルで特定の文字列がある行だけを抽出するUNIXの有名なコマンドですよね。それを正規表現を使って、テキストエディタとかで似たような動作をさせてみようというものです。バイト先で聞かれてメールで答えたんだけど、言った本人がすでに忘れているので、送ったメールを見ながらメモっておく、と。

s/^((?!hoge).)*$\r?\n?//g

Perlの構文で書いています。使うときは"hoge"を適当な文字列に変えて実行してみてください。
簡単に説明すると、"((?!hoge).)"が後に"hoge"が続かない「位置(文字じゃなくて)」の次の1文字にマッチします。なので、"((?!hoge).)*"は、現在の位置から"hoge"より前までのマッチとなります。これを挟んで ^$ を指定しているので、"^((?!hoge).)*$"は、"hoge"を含まない行にマッチします。あとの"\r?\n?"は、改行文字にマッチさせて改行を消しているだけです。
grepが標準で使えないWindows環境だと役に立つ・・・かもしれないw
ちなみに、先読みが使えない正規表現エンジン(sedとか)だと動きません。