正規表現エンジンで一部のメタ文字をエスケープする必要があるのに、他のメタ文字はエスケープしないのはなぜですか?例えば:
/foo[1-9]*
期待どおりに機能しますが、正規表現
foo[1-9]+
次のように表現する必要があります
/foo[1-9]\+
vimで。誰か知ってる?
これは、vim(実際にはvi)がperlよりもずっと前に独自の正規表現フレーバーを作成したためです。POSIX BREとEREでさえ、vimwikipediaの後に登場しました。彼らはまだ独自の味を維持しているので、それはかなり異なります。
答えをより機知に富んだものにするために、ここにed
のwikiからの引用があります。
このエディターは、 1971年にKenThompsonによってPDP-11/20アセンブラーで作成されました。edの多くの機能は、母校であるカリフォルニア大学バークレー校のqedに由来します。3Thompsonはqedに精通しており、CTSSおよびMulticsシステムに再実装しました。彼のバージョンのqedは、正規表現を実装した最初のバージョンでした。正規表現はedの一部ですが、その実装はqedよりもかなり一般的ではありません。
edの側面はexに影響を与え続け、exはviを生み出しました。非対話型のUnixコマンドgrepは、qed以降のedの一般的な特殊な使用法に触発されました。ここで、コマンドg / re / pは、正規表現reをグローバルに検索し、それを含む行を出力することを意味します。Unixストリームエディタであるsedは、Unixではedでサポートされていなかったqedのスクリプト機能の多くを実装しました。次に、sedはプログラミング言語AWKの設計に影響を与えました。これはPerlの側面に影響を与えました。
これらの2つの段落には多くの情報があります!すべてを大胆にできたらいいのにと思います。いくつかのハイライト、
ed
1971年に書いた。ed
実際にはの再実装でしqed
た。qed
たが、実際にはed
です。ed
、1976年にウィリアムジョイ(ビルジョイとして知られている)はex
ウィキペディアを書いたvi
と呼ばれるラインエディタのビジュアルモードとして書いたex
grep
qed
の特別な使用とその後に触発されましたed
。sed
Unixのedでサポートされていないqedのスクリプト機能の多くとして実装されましたsed
のデザインに影響を与えましたawk
。つまり、viの正規表現はed
1971年に作成されたものでした。これは、他の正規表現のフレーバーよりもずっと前のことです。