7

正規表現エンジンで一部のメタ文字をエスケープする必要があるのに、他のメタ文字はエスケープしないのはなぜですか?例えば:

/foo[1-9]*  

期待どおりに機能しますが、正規表現

foo[1-9]+  

次のように表現する必要があります

/foo[1-9]\+  

vimで。誰か知ってる?

4

1 に答える 1

25

これは、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に影響を与え続け、exviを生み出しました。非対話型のUnixコマンドgrepは、qed以降のedの一般的な特殊な使用法に触発されました。ここで、コマンドg / re / pは、正規表現reをグローバルに検索し、それを含む行を出力することを意味します。Unixストリームエディタであるsedは、Unixではedでサポートされていなかったqedのスクリプト機能の多くを実装しました。次に、sedはプログラミング言語AWKの設計に影響を与えました。これはPerlの側面に影響を与えました。

これらの2つの段落には多くの情報があります!すべてを大胆にできたらいいのにと思います。いくつかのハイライト、

  • ケントンプソンはed1971年に書いた。ed実際にはの再実装でしqedた。
  • ケンは彼のバージョンに正規表現を追加しましqedたが、実際にはedです。
  • に触発されてed、1976年にウィリアムジョイ(ビルジョイとして知られている)はexウィキペディアを書いた
  • 1976年にビルジョイはウィキペディアviと呼ばれるラインエディタのビジュアルモードとして書いたex
  • grepqedの特別な使用とその後に触発されましたed
  • sedUnixのedでサポートされていないqedのスクリプト機能の多くとして実装されました
  • sedのデザインに影響を与えましたawk

つまり、viの正規表現はed1971年に作成されたものでした。これは、他の正規表現のフレーバーよりもずっと前のことです。

于 2012-12-22T01:00:16.687 に答える